GNU/Linux >> Linux Esercitazione >  >> Linux

Impostazione pipefail per un singolo comando con pipe

Dalla riga di comando di Bash dovresti invocare una subshell per evitare pipefail essere impostato in seguito:

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

Ciò limiterebbe l'effetto del pipefail opzione alla subshell creata dalle parentesi (...) .

Un esempio reale:

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

Se usi una chiamata shell esplicita con -c opzione non hai bisogno di una subshell, neanche con bash o con un sh alias di 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

Dal tuo sh non accetta pipefail opzione, dovrei presumere che si tratti di una versione precedente o modificata di bash - o che in realtà è completamente un'altra shell.


Non sono sicuro del motivo per cui non è stato menzionato sopra, ma è possibile annullare l'impostazione esplicita di pipefail , utilizzando set +o pipefail .

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

Se stai eseguendo un frammento e non sei sicuro del pipefail già impostato, puoi usarlo con la subshell come suggerito in precedenza:

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

Linux
  1. Come disabilitare un alias in Bash per un singolo comando??

  2. Imposta password per modalità utente singolo su Linux (CentOS/RHEL)

  3. Impostazione del colore di sfondo in gvim

  4. Bash se su una sola riga

  5. Sintassi corretta per il comando id -r

12 Esempi di comandi IP per utenti Linux

Comando Linux Change per impostare la durata della password per l'utente

Installa il sottosistema Windows per Linux con un comando singolo

Esempi di comandi DNF per principianti

Exa:un sostituto moderno per ls Command

Come impostare PATH per tutti gli utenti in Debian?