GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Einstellen von Pipefail für einen einzelnen Pipe-Befehl

Ü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 )

Linux
  1. Legen Sie Datum und Uhrzeit für jeden Befehl fest, den Sie im Bash-Verlauf ausführen

  2. DNF-Befehlsbeispiele für Anfänger

  3. Wie erstelle ich einen umfassenden Satz von Möglichkeiten zum Definieren von Gnu-Bildschirm-„Befehlszeichen“?

  4. Bash wenn auf einer einzigen Zeile

  5. Korrekte Syntax für den Befehl id -r

12 IP-Befehlsbeispiele für Linux-Benutzer

Linux-Chage-Befehl zum Festlegen der Kennwortalterung für Benutzer

Installieren Sie das Windows-Subsystem für Linux mit einem einzigen Befehl

Exa – Ein moderner Ersatz für ls Command

Öffnen Sie die Manpage und suchen Sie mit einem einzigen Befehl nach einer Zeichenfolge

Wie setze ich PATH für alle Benutzer in Debian?