Ich weiß ein wenig von bash
Rückkehrcodes auf erfolgreiche/Fehlerbedingungen, aber ich experimentierte ein wenig mit wait
auf Hintergrundprozesse auf paar von Skripte auf if
Zustand und ich war überrascht, dass das Verhalten auf den Return-Fehlercodes 0
für den Erfolg und nicht-Null für Fehlerfälle zu sehen.Wait Prozess-ID auf eine Bash If-Condition Fehlercode 1 für erfolgreiche Beendigung des Prozesses
Meine Skripte: -
$cat foo.sh
#!/bin/bash
sleep 5
$cat bar.sh
#!/bin/bash
sleep 10
$cat experiment.sh
./foo.sh &
pid1=$!
./bar.sh &
pid2=$!
if wait $pid1 && wait $pid2
then
echo "Am getting screwed here!"
else
echo "Am supposed to be screwed here!"
fi
das Skript ausführen, wie es ist und die Ausgabe als Am getting screwed here!
statt Am supposed to be screwed here!
$./experiment.sh
Am getting screwed here!
nun die Skripte modifiziert werden, um mit Nachdruck Exit-Codes zurückgeben mit exit
in beide bekommen foo.sh
$cat foo.sh
#!/bin/bash
sleep 5
exit 2
$cat bar.sh
#!/bin/bash
sleep 10
exit 17
Und sind überrascht, die Ausgabe als
$./experiment.sh
Am supposed to be screwed here!
Apologize für die detaillierte Post, aber jede Hilfe dankbar zu sehen. Die man-Seite als Referenz: - http://ss64.com/bash/wait.html
Gute Erklärung! Aber ich bekomme immer noch nicht die Tatsache, warum 'if wait $ pid1 && wait $ pid2' als 'if (1)' für den ersten Teil der Frage ausgewertet wird, wenn die Skripte erfolgreich zurückgeliefert wurden. Sie haben gesagt, 'wait', wenn Sie mit einem Prozess aufgerufen werden, gibt den Status des Prozesses, auf den gewartet wird, zurück. Wenn das der Fall ist, sollte nicht der erste Teil zu "if (0)" ausgewertet werden, wobei beide "wait" (s) erfolgreich zurückgeliefert werden? – Inian
Ich glaube, Sie missverstehen Ausgangscodes und "if" -Aussagen. Erstellen Sie ein Skript mit Ihrer 'if'-Anweisung und ersetzen Sie die' wait'-Befehle durch 'true'. – Mort
@ Mort, @ chepner: Bear mit mir, während ich vorbei komme :)! Alles, was ich zu verstehen versuche, ist, wie sich 'if (0 && 0)' zu einer positiven Bedingung auswirkt. Verzeih mir, wenn ich etwas Grundlegendes verpasse. – Inian