2 Stimmen

Bash: $? gibt 1 zurück, obwohl es 0 sein sollte

Ich habe ein Bash-Skript mit der Zeile

klist | grep DHCPTEST.COM > /dev/null

Ich weiß, dass klist Zeilen mit DHCPTEST.COM zurückgibt, also weiß ich, dass grep true (0) zurückgeben sollte, und wenn das Skript von der Befehlszeile aus ausgeführt wird, gibt $? tatsächlich 0 zurück.

Wenn das Skript jedoch von einem C-Programm (DHCPD) aus aufgerufen wird, gibt die Zeile False zurück (d.h. $? ist auf 1 gesetzt) - Warum?

1voto

sehe Punkte 346808

Um Verwirrung zu vermeiden, buchstabieren Sie es aus:

grep -q DHCPTEST.COM <(klist)

Höchstwahrscheinlich sind die Unterschiede im Verhalten auf folgende Faktoren zurückzuführen

  • eine andere Shell (bash, dash, sh?) wird aufgerufen
  • unterschiedliches Verhalten der Unterschale (ein Rohr wird in der Regel eine Subshell aufzurufen. Ich muss persönlich nachsehen, welcher Exit-Code zurückgegeben wird (der von klist oder die von grep )

Mit der obigen Vorgehensweise vermeiden Sie die mögliche Mehrdeutigkeit, indem Sie Pipes durch Befehlssubstitutionen ersetzen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X