eine Pipeline so etwas wie gegeben, möchte ich auf das Ergebnis von Schritt B. So etwas wie dieser Schritt C abhängig machen:Conditional Schritt in einer Pipeline
A | B | if [ $? -ne 0 ]; then C; else cat; fi | D | E
Aber das scheint nicht zu funktionieren; C wird nie ausgeführt, egal was das Ergebnis von B. Ich suche nach einer besseren Lösung.
Ich verstehe, dass jeder Schritt einer Pipeline in einer eigenen Subshell ausgeführt wird. Daher kann ich eine Umgebungsvariable nicht an die Pipeline zurückgeben. Diese Pipeline befindet sich jedoch in einer parallelen Gnu-Umgebung, in der viele solcher Pipelines gleichzeitig ausgeführt werden und keiner von ihnen einen eindeutigen Wert kennt (sie verarbeiten nur den Datenstrom und müssen die Quelle nicht kennen, das Parent-Skript verarbeitet die erforderliche Trennung). Das bedeutet, dass die Verwendung einer temporären Datei auch nicht praktisch ist, da es keine Möglichkeit gibt, die Dateinamen eindeutig zu machen. Selbst $$ scheint mir keinen Wert zu geben, der in jedem der Schritte gleich ist.
Sie könnten sich 'set -o pipefail' ansehen, aber realistischerweise müssen Sie nur Ihre Befehle zerlegen, anstatt eine einzige Pipeline zu verwenden. –