Bio: (BASH) Kommandos mit Ausgabe schlagen in Skript fehl

Beitrag lesen

Sup!

Ich habe ein Problem. In einem Skript (usb.agent, für USB-Hotplugging), das vom Kernel-Hotplug-Dämon angestossen wird, habe ich einen Fehler entdeckt; dort steht irgendwo

if ! lsmod | grep -q "^$MODULE"; then
...
fi

Das ergibt aber immer "true" (als würde das Modul nie geladen sein), und der Inhalt des ifs wird immer ausgeführt.

Das anscheinend deshalb, weil unter GNU/Linux (in der Man-Page von grep wird auch davor gewarnt!) grep -q wohl nicht wirklich ganz auf eine Ausgabe verzichtet, was anscheinend den Fehler auslöst.

Als Test habe ich folgendes ins Skript geschrieben:

echo "bla bla" | grep "bla" >/dev/null 2>&1
logger ${PIPESTATUS[*]}
echo "bla bla" | grep -q "bla"
logger ${PIPESTATUS[*]}

(Die Bash stellt netterweise die Exit-Stati aller Kommandos in einer Pipe im Array PIPESTATUS zur Verfügung)

Ersteres Kommand ergibt im Log 0 0 (beide Kommandos erfolgreich), zweiteres 0 2 (echo klappt, aber grep versagt mit System-Fehler)

Wie kann das sein? Ist in System-Skripten STDOUT immer geschlossen?

Gruesse,

Bio

--
Keep your friends close, but STDOUT open!