2016-11-17 1 views
0

Ce script shell fonctionne très bien sur GNU/Linux, mais pas sur AIX 5,3comportement inattendu avec "set -o errexit" sur AIX

#!/bin/sh 

echo $SHELL 

set -o nounset -o errexit 

[ 1 -eq 1 ] && { 
    echo "zzz" 
} && echo "aaa" && [ 1 -eq 0 ] && echo "bbb" 
echo "ccc" 

sur GNU/Linux, j'ai le résultat attendu:

/bin/bash 
zzz 
aaa 
ccc 

Sur AIX, j'ai celui-ci:

/bin/ksh 
zzz 
aaa 

Sans "set -o -o nounset errexit" il fonctionne très bien ... Je n'understant pourquoi. Pourriez-vous m'expliquer ce qui ne va pas dans mon script shell.

Merci,

Rémy


Modifier. 18 novembre : Précision

set -e Lorsque cette option est activée, si une simple commande échoue pour une des raisons énumérées dans les conséquences des erreurs de Shell ou retourne une sortie valeur d'état> 0, et ne fait pas partie de la liste composée suivant un while, until, ou if keyword, et ne fait pas partie d'une liste AND ou OR , et n'est pas un pipeline précédé du! mot réservé, alors la coque doit immédiatement sortir. http://explainshell.com/explain?cmd=set+-e

Dans mon exemple, le second test "[1 -eq 0]" fait partie d'un ET, donc je devrais voir la sortie "ccc". Ce test renvoie 1, il piège la sortie "bbb", mais ne devrait pas quitter le script.

Rémy

+0

je suppose que '/ bin/sh' dans votre Linux (probablement' 'ash' ou dash') simplement doesn » t comprendre 'set -o errexit'. Utilisez bash (que la première ligne soit '#!/Bin/bash') Edit: env' SHELL' étant '/ bin/bash' ne prouve rien, ne comptez pas dessus. –

Répondre

0

le même comportement sur AIX 6 et 7

Rémy