Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/02/2012, à 11:01

Keyhaku

[Résolu] [sh/Awk] impossible de détecter erreurs si pipe avec awk

Salut à tous,

depuis peu j'ai commencé à faire des scripts et je rencontre un problème :

Je cherche à lancer un script qui s'arrête dès qu'il y a une erreur (avec l'option set -e), cela marche plutôt bien sauf dans un cas :
Si je lance une commande et que je redirige la sortie (pipe) sur un awk, le script ne détecte plus l'erreur et continue à exécuter la suite..

Dans cet exemple la commande "abc", est bien détectée comme une erreur et le script s’arrête.

set -e
ERREUR="error.log"
ES=`{ abc | ls ; } 2>$ERREUR`
...

Ici l'erreur n'est pas détectée...

set -e
ERREUR="error.log"
ES=`{ abc | awk ' { print $1 }' ; } 2>$ERREUR`
...

Voilà la sortie lorsque j'exécute le 2eme script avec l'option -x :

$ sh -x test.sh
+ set -e
+ ERROR=tmp.log
+ES=
+exit 0

$ cat error.log
++ abc
++ awk ' {print $1} '
test.sh: ligne 5: abc : commande introuvable

Quelqu'un peut m'expliquer ?

Merci d'avance

Dernière modification par Keyhaku (Le 22/02/2012, à 14:10)

Hors ligne

#2 Le 22/02/2012, à 13:10

pingouinux

Re : [Résolu] [sh/Awk] impossible de détecter erreurs si pipe avec awk

Bonjour,
Voici un extrait de man bash (rubrique Pipelines) :

       The return status of a pipeline is the exit status of the last command,
       unless the pipefail option is enabled.  If  pipefail  is  enabled,  the
       pipeline's  return  status is the value of the last (rightmost) command
       to exit with a non-zero status, or zero if all commands  exit  success‐
       fully.

Pour s'arrêter immédiatement, il faut mettre cette ligne en début de script, en plus de set -e :

set -o pipefail

Hors ligne

#3 Le 22/02/2012, à 13:49

Keyhaku

Re : [Résolu] [sh/Awk] impossible de détecter erreurs si pipe avec awk

Parfait ça marche impec !

Merci beaucoup, je vais pouvoir faire un script vraiment propre avec ça.

Dernière modification par Keyhaku (Le 22/02/2012, à 13:50)

Hors ligne