fruits.txt
apple
banana
orange
#!/bin/bash
cat fruits.txt | while read LINE do
echo ${LINE}
if [ $? -ne 0 ] ; then
echo "Error:${LINE}"
exit 1;
fi
done
echo "Erfolgreiche Fertigstellung!"
done
Es ist ein Programm, das den Inhalt vonruit.txt katzt, ihn mit einer Pipe an die while-Anweisung übergibt und standardmäßig ausgibt.
Wenn beispielsweise das Bananenecho fehlschlägt, lautet die erwartete Ausgabe:
apple
Error:banana
Die tatsächliche Ausgabe ist jedoch wie folgt. Das Skript wurde nach dem Fehler nicht beendet und die nachfolgende Verarbeitung wird fortgesetzt.
apple
Error:banana
orange
Erfolgreiche Fertigstellung!
Bei der Übergabe an eine while-Anweisung mit einer Pipe ist die while-Schleife ein untergeordneter Prozess des ursprünglichen Skripts Es wird ausgeführt. Selbst wenn Sie 1 beenden, wird daher nur der untergeordnete Prozess beendet. Der Hauptprozess wird fortgesetzt.
Der übergeordnete Prozess nimmt den Rückgabewert 1 des untergeordneten Prozesses auf und bewirkt, dass der übergeordnete Prozess abnormal beendet wird.
cat fruits.txt | while read LINE do
echo ${LINE}
if [ $? -ne 0 ] ; then
echo "Error:${LINE}"
exit 1;
fi
done
if [ $? -ne 0 ] ; then
exit 1;
fi
Wenn Sie das Ergebnis von cat in der Liste der for-Anweisungen angeben, wird das Problem behoben. Wenn Sie dies tun, müssen Sie keine Variable definieren, um das Ergebnis von cat separat zu platzieren.
for FRUIT in `cat fruits.txt`; do
echo ${FRUIT}
done
Recommended Posts