GNU/Linux >> Tutoriels Linux >  >> Linux

Définition de pipefail pour une seule commande canalisée

À partir de la ligne de commande Bash, vous devrez invoquer un sous-shell pour éviter pipefail être défini par la suite :

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

Cela limiterait l'effet du pipefail option au sous-shell créé par les parenthèses (...) .

Un exemple concret :

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

Si vous utilisez un appel shell explicite avec le -c option vous n'avez pas besoin d'un sous-shell, soit avec bash ou avec un sh alias vers 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

Depuis votre sh n'accepte pas le pipefail option, je devrais supposer qu'il s'agit d'une version plus ancienne ou modifiée de bash - ou qu'il s'agit en fait d'un autre shell complètement.


Je ne sais pas pourquoi cela n'a pas été mentionné ci-dessus, mais il est possible de désactiver explicitement pipefail , en utilisant set +o pipefail .

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

Si vous exécutez un fragment et que vous n'êtes pas sûr du pipefail déjà défini, vous pouvez l'utiliser avec le sous-shell comme suggéré précédemment :

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

Linux
  1. Exemples de commandes DNF pour les débutants

  2. Qu'est-ce qui définit la taille maximale d'un seul argument de commande ?

  3. Comment créer un ensemble complet de possibilités pour définir les "caractères de commande" de l'écran GNU ?

  4. Comment désactiver un alias dans Bash pour une seule commande ? ?

  5. Définir la couleur d'arrière-plan dans gvim

Définir la date et l'heure de chaque commande que vous exécutez dans l'historique de Bash

12 exemples de commandes IP pour les utilisateurs Linux

Commande Linux Changement pour définir le vieillissement du mot de passe pour l'utilisateur

Installer le sous-système Windows pour Linux avec une seule commande

Exa - Un remplacement moderne pour la commande ls

Comment définir PATH pour tous les utilisateurs dans Debian ?