GNU/Linux >> Znalost Linux >  >> Linux

Nastavení pipefail pro jeden pipetovaný příkaz

Z příkazového řádku Bash byste museli vyvolat subshell, abyste se vyhnuli pipefail nastavuje se později:

$ (set -o pipefail && command1 | command2 | command3)

To by omezilo účinek pipefail možnost do podshell vytvořeného pomocí závorek (...) .

Skutečný příklad:

$ (set -o pipefail && false | true) && echo pipefail inactive || echo pipefail active
pipefail active

Pokud použijete explicitní volání shellu s -c nepotřebujete subshell, ani s bash nebo s sh alias na 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

Od vašeho sh nepřijímá pipefail možnost, musel bych předpokládat, že se jedná buď o nějakou starší nebo upravenou verzi bash - nebo že je to vlastně úplně nějaká jiná skořápka.


Nejste si jisti, proč to nebylo uvedeno výše, ale je možné explicitně zrušit nastavení pipefail pomocí set +o pipefail .

set -o pipefail
command1 | command2 | command3
set +o pipefail

Pokud spouštíte fragment a nejste si jisti pipefail již nastaveno, můžete jej použít s podshellem, jak bylo dříve navrženo:

# explicitly execute with pipefail set
(set -o pipefail ; command1 | command2 | command3 )
# explicitly execute with pipefail unset
(set +o pipefail ; command1 | command2 | command3 )

Linux
  1. Co definuje maximální velikost pro jeden příkazový argument?

  2. Zabalit příkaz, který obsahuje jednoduché a dvojité uvozovky pro jiný příkaz?

  3. Jak zakázat alias v Bash pro jeden příkaz?

  1. Jak spustit aplikaci po nastavenou dobu v prostředí Shell?

  2. Nastavení hesla pro režim jednoho uživatele v systému Linux (CentOS/RHEL)

  3. Jak nastavit PATH pro všechny uživatele v Debianu?

  1. Příklady příkazů DNF pro začátečníky

  2. Jak vytvořit komplexní sadu možností pro definování „příkazových znaků“ na obrazovce Gnu?

  3. Nastavení barvy pozadí v gvim