seltsames Verhalten eines shell-skriptes
Hi, ich habe Probleme, ein MIB file in den HP Systems Insight Manager zu importieren. Um dem Problem näher zu kommen, habe ich mir mal alle erfolgreich importieren MIB files in eine Textdatei listen lassen: Die sieht so aus: HH3C-MAC-INFORMATION-MIB.mib HH3C-ENTITY-EXT-MIB.mib bladetype2-qos.mib nsnicmib.mib gbe2c-10g-l2l3.mib VMWARE-ENV-MIB.mib threeparmib.mib cisco-entity-vendortype-oid.mib cpqrack.mib XL_HSV_200.mib ... fpipes.mib cpqhsv110v3.mib cisco-ftp-client.mib cpqups.mib cisco-udldp.mib LEFTHAND-NETWORKS-NSM-NETWORK-MIB.mib bladetype2-acl.mib ztsa.mib hptrap.mib Pro Zeile ein Dateiname. KeinVoodoo. So sieht mein Skript aus: ========================================= #!/bin/bash i=0 while read -r LINE do echo $i echo $LINE /opt/mx/bin/mxmib -t $LINE ret=$? echo "Rückgabewert: $ret" let i+=1 done < /opt/mx/mibs/mib_list.txt ========================================= Die Zeile /opt/mx/bin/mxmib -t $LINE soll mir die jeweils in der MIB Datei aufgeführten traps anzeigen. Das Skript macht das aber nur für die ERSTE Zeile meiner Liste (HH3C-MAC-INFORMATION-MIB.mib), dann beendet sich das Skript. Ohne Fehlermeldung. Der Rückgabewert ist 0. Kommentiere ich diese Zeile aus, läuft das Skript wie erwartet. Es zeigt alle in der Datei enthaltenen Dateinamen und zählt mir auch die Variable hoch (Ich hab die nur eingebaut um zu sehen ob die Schleife mehrmals durchlaufen wird, Und ja, das wird sie. Wenn ich mxmib auskommentiere.) Ich versteh's nicht. Any ideas ? Bernd -- Bernd Lentes Systemadministration institute of developmental genetics Gebäude 35.34 - Raum 208 HelmholtzZentrum München bernd.lentes@helmholtz-muenchen.de phone: +49 (0)89 3187 1241 fax: +49 (0)89 3187 2294 no backup - no mercy Helmholtz Zentrum München -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
On Dienstag, 4. Juli 2017 00:12:04 CEST Lentes, Bernd wrote:
So sieht mein Skript aus:
========================================= #!/bin/bash
i=0 while read -r LINE do echo $i echo $LINE /opt/mx/bin/mxmib -t $LINE ret=$? echo "Rückgabewert: $ret" let i+=1 done < /opt/mx/mibs/mib_list.txt =========================================
Die Zeile /opt/mx/bin/mxmib -t $LINE soll mir die jeweils in der MIB Datei aufgeführten traps anzeigen. Das Skript macht das aber nur für die ERSTE Zeile meiner Liste (HH3C-MAC-INFORMATION-MIB.mib), dann beendet sich das Skript. Ohne Fehlermeldung. Der Rückgabewert ist 0. Kommentiere ich diese Zeile aus, läuft das Skript wie erwartet. Es zeigt alle in der Datei enthaltenen Dateinamen und zählt mir auch die Variable hoch (Ich hab die nur eingebaut um zu sehen ob die Schleife mehrmals durchlaufen wird, Und ja, das wird sie. Wenn ich mxmib auskommentiere.)
ich schreib in solchen Fällen oben ins Skript ein set -x um zu sehen, was da wirklich für ein Befehl ausgeführt wird. man set » −x The shell shall write to standard error a trace for each command after it expands the command and before it executes it. It is unspecified whether the command that turns tracing off is traced. « vielleicht hilfts... mararm -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
On Di, 04 Jul 2017, Lentes, Bernd wrote:
Hi,
ich habe Probleme, ein MIB file in den HP Systems Insight Manager zu importieren. Um dem Problem näher zu kommen, habe ich mir mal alle erfolgreich importieren MIB files in eine Textdatei listen lassen: Die sieht so aus:
HH3C-MAC-INFORMATION-MIB.mib HH3C-ENTITY-EXT-MIB.mib bladetype2-qos.mib nsnicmib.mib gbe2c-10g-l2l3.mib VMWARE-ENV-MIB.mib threeparmib.mib cisco-entity-vendortype-oid.mib cpqrack.mib XL_HSV_200.mib
...
fpipes.mib cpqhsv110v3.mib cisco-ftp-client.mib cpqups.mib cisco-udldp.mib LEFTHAND-NETWORKS-NSM-NETWORK-MIB.mib bladetype2-acl.mib ztsa.mib hptrap.mib
Pro Zeile ein Dateiname. KeinVoodoo.
So sieht mein Skript aus:
========================================= #!/bin/bash
i=0 while read -r LINE do echo $i echo $LINE /opt/mx/bin/mxmib -t $LINE ret=$? echo "Rückgabewert: $ret" let i+=1 done < /opt/mx/mibs/mib_list.txt =========================================
Die Zeile /opt/mx/bin/mxmib -t $LINE soll mir die jeweils in der MIB Datei aufgeführten traps anzeigen. Das Skript macht das aber nur für die ERSTE Zeile meiner Liste (HH3C-MAC-INFORMATION-MIB.mib), dann beendet sich das Skript. Ohne Fehlermeldung. Der Rückgabewert ist 0. Kommentiere ich diese Zeile aus, läuft das Skript wie erwartet. Es zeigt alle in der Datei enthaltenen Dateinamen und zählt mir auch die Variable hoch (Ich hab die nur eingebaut um zu sehen ob die Schleife mehrmals durchlaufen wird, Und ja, das wird sie. Wenn ich mxmib auskommentiere.)
Ich versteh's nicht.
Dein mxmib liest wahrscheinlich stdin. Probiere mal dem mxmib Kommando ein < /dev/null mitzugeben. Grüße, Christian -- Wenn dem Menschen am Ende seines Lebens ein Lächeln übrig bleibt, so ist das ein sehr anständiger Reingewinn. -- Horst Wolfram Geißler -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
----- Am 4. Jul 2017 um 10:46 schrieb Christian Brabandt cblists@256bit.org:
Dein mxmib liest wahrscheinlich stdin. Probiere mal dem mxmib Kommando ein < /dev/null mitzugeben.
Hallo Christian, danke. Das war's. 2 Fragen: 1. Wie bist Du darauf gekommen ? 2. Wieso sorgt das für einen Abbruch der Schleife ? Bernd Helmholtz Zentrum München -- Um die Liste abzubestellen, schicken Sie eine Mail an: opensuse-de+unsubscribe@opensuse.org Um den Listen Administrator zu erreichen, schicken Sie eine Mail an: opensuse-de+owner@opensuse.org
Lentes, Bernd schrieb am Dienstag, den 04. Juli 2017:
Dein mxmib liest wahrscheinlich stdin. Probiere mal dem mxmib Kommando ein < /dev/null mitzugeben.
Hallo Christian,
danke. Das war's. 2 Fragen:
1. Wie bist Du darauf gekommen ?
Das ist ein bekanntes Phänomen und tritt wahrscheinlich am häufigsten bei ssh auf, z.B. http://mywiki.wooledge.org/BashFAQ/089 (für ssh gibt es dann auch noch den Parameter -n) Es gibt auch genügend ähnliche Postings auf stackoverflow.com https://stackoverflow.com/questions/5549405/shell-script-while-read-loop-exe... https://unix.stackexchange.com/questions/66154/ssh-causes-while-loop-to-stop
2. Wieso sorgt das für einen Abbruch der Schleife ?
Deine Schleife sah so aus:
,----
| while read -r LINE
| do
| ....
| done < Datei
`----
Deine Schleife läuft zeilenweise über den Inhalt der Datei. Für diese
Art der Schleife wird stdin auf den Inhalt der aktuellen Zeile
umgebogen.
Wenn jetzt ein Programm innerhalb der Schleife selbstständig aus stdin
liest (und stdin "leert"), dann gibt es nichts mehr worüber die Schleife
iterieren kann und sie beendet sich nach dem ersten Durchlauf. Daher
verbiegt man solchen Programmen dann stdin nach /dev/null
Alternativ kann man auch aus einem anderen Filedescriptor lesen:
,----
| while read -r line <&3; do
| ...
| done 3
participants (3)
-
Christian Brabandt
-
Lentes, Bernd
-
mararm