Über die Bash-Befehlszeile müssten Sie eine Subshell aufrufen, um pipefail
zu vermeiden nachträglich gesetzt werden:
$ (set -o pipefail && command1 | command2 | command3)
Dies würde die Wirkung von pipefail
einschränken Option zur Subshell erstellen durch die Klammern (...)
.
Ein reales Beispiel:
$ (set -o pipefail && false | true) && echo pipefail inactive || echo pipefail active
pipefail active
Wenn Sie einen expliziten Shell-Aufruf mit dem -c
verwenden Option benötigen Sie keine Subshell, auch nicht mit bash
oder mit einem sh
Alias zu bash
:
$ bash -c "set -o pipefail && false | true" && echo pipefail inactive || echo pipefail active
pipefail active
$ sh -c "set -o pipefail && false | true" && echo pipefail inactive || echo pipefail active
pipefail active
Seit Ihrem sh
akzeptiert nicht den pipefail
Option, müsste ich davon ausgehen, dass es sich entweder um eine ältere oder modifizierte Version von bash
handelt - oder dass es eigentlich eine ganz andere Hülle ist.
Ich bin mir nicht sicher, warum es oben nicht erwähnt wurde, aber es ist möglich, pipefail
explizit zu deaktivieren , mit set +o pipefail
.
set -o pipefail
command1 | command2 | command3
set +o pipefail
Wenn Sie ein Fragment ausführen und sich bezüglich pipefail
nicht sicher sind bereits festgelegt, können Sie dies wie zuvor vorgeschlagen mit der Subshell verwenden:
# explicitly execute with pipefail set
(set -o pipefail ; command1 | command2 | command3 )
# explicitly execute with pipefail unset
(set +o pipefail ; command1 | command2 | command3 )