Und den Exitcode von einem "Nicht-letzten"-Befehl in der Gruppierung kann ich dann wahrscheinlisch nur so in der Art abfangen, oder?
Ich hatte doch zuvor das bash Array PIPESTATUS erwähnt. Im folgendem Beispiel:
$ rm *.xxx 2>/dev/null
$ ls -log *.xxx 2>&1 | wc -w | cat -n -; echo ${#PIPESTATUS[@]}, ${PIPESTATUS[@]};
1 11
3, 2 0 0
$
ist der "ls" Befehl nicht erfolgreich (Status=2). Das die Fehlermeldung durch "2>&1" per Pipe an den Befehl "wc -w" geschickt und per pipe an den "cat" Befehl weiter geleitet wird, erhält man ein Array mit 3 Elementen ${#PIPESTATUS[@]} . Die Status-Werte der 3 Befehlen sind 2 (Fehler bei "ls") und zwei erfolgreiche Befehle ("wc" und "cat").
Interessant ist der Fehler 141 (=128+13), wenn der Wert in der Pipe wegen eines Fehlers im empfangenden Befehl nicht weiter verarbeitet werden kann. Beispiel:
$ ls -log *.xxx 2>&1 | wc -w | cat -x -; echo ${#PIPESTATUS[@]}, ${PIPESTATUS[@]};
cat: Ungültige Option -- x
„cat --help“ liefert weitere Informationen.
3, 2 141 1
$
Natürlich liefert der letzte Befehl "cat" dann einen Status von 1.