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!