Si je mets set -e
dans un script de Bash, le script se terminera sur les erreurs futures. Je suis confus quant à la façon dont cela fonctionne avec les fonctions. Considérez ce qui suit, qui n'imprimera que one
à la norme :
set -e # Exit on error
fun(){
echo one
non_existing_command
echo two
}
fun
Il est clair que le non_existing_command
est une erreur et donc le script sort avant le second echo
. En général, on peut utiliser le o opérateur ||
pour exécuter une autre commande si et seulement si la première commande échoue. En d'autres termes, je soupçonnerais ce qui suit d'imprimer à la fois one
y three
mais pas two
:
set -e # Exit on error
fun(){
echo one
non_existing_command
echo two
}
fun || echo three
Ce que j'obtiens cependant est one
y two
. C'est-à-dire que le ||
empêche la sortie (comme il se doit) mais il choisit de continuer avec le corps de la fonction et d'ignorer la commande de droite.
Une explication ?