Jeśli wywołujesz zewnętrzny skrypt, a w nim nie obsługujesz błędów, to niestety nie będziesz mógł skorzystać z wartości zwracanej przez uruchamiany program (np. iptables). Jeśli jest niezerowa, to z reguły oznacza to wystąpienie błędu.
Jeśli możesz edytować te zewnętrze pliki, to najlepiej dodać w nim do każdej linii:
(tak jak w pliku 2.sh poniżej)
Dzięki temu przy pierwszym błędzie wewnętrzny skrypt zostanie przerwany i zwróci wartość 1 (niezerową, więc błąd).
W głównym programie w taki sam sposób możesz ten błąd przechwycić:
./skrypt2.sh || echo "Wystapil blad w skrypcie 2."
1.sh:
#!/bin/sh
./2.sh || echo "Blad w skrypcie 2.sh"
exit 0
2.sh:
#!/bin/sh
echo "A"
ech "B"
echo "C" || exit 1
ech "D" || exit 1
echo "E" || exit 1
echo "F" || exit 1
echo "G" || exit 1
exit 0
Odpalenie ./1.sh zakończy się po nieudanej próbie wyświetlenia "D".
----
Możesz także czytać standardowe wyjście błędów i zakładać, że jeśli coś się na nim pojawi, to wystąpił błąd. Ale to nie jest zbyt dobre podejście i może być zawodne.