2017-03-15 3 views
1

genre sotte question, mais ...

je peux quitter si une commande échoue assez facilement:

command || exit $? 

Si je veux interposer quelque chose entre la commande et la sortie, je peux tester le retour Code vs 0 ou sortie seulement d'un sous-shell:

command ; rc=$? 
echo That command returned $rc 
[ $rc -eq 0 ] || exit $rc 
# or 
(exit $rc) || exit $rc 

Mais je n'aime pas vs 0 essai, car il fait 0 = true explicite. Et alors que j'aime bien (exit $ rc) car il évite explicit 0, un sous-shell semble lourd et l'utilisation de exit deux fois semble redondant.

Existe-t-il une meilleure alternative?

+0

De la manière de Salme vous avez essayé la sortie, vous pouvez utiliser une fonction bash retourner son entrée, non? –

+0

@LaurentG Je pourrais, mais alors je devrais définir cela, donc ce ne serait pas un simple doublure. –

+0

son dépend de la longueur de la ligne ... avec des accolades et des points-virgules .../o \ –

Répondre

0

Pas quiiiite ce que j'avais à l'esprit, mais assez près pour moi parce que je généralement ne se soucient que de l'échec:

$ bash 
bash-3.2$ false || exit $? $(echo worbly boo $? > /dev/tty) 
worbly boo 1 
exit 

court-coupe la $() commodément, donc pas sous-shell, sauf dans un cas d'erreur.

Il gère également les défaillances dans le $() assez élégante:

bash-3.2$ false || exit $? $((foo ; echo $?) > /dev/tty) 
bash: foo: command not found 
127 
exit 
0

Définition d'une fonction pour gérer l'échec cas:

fail() { 
    echo failed with code $1; 
    exit $1; 
} 
true || fail $?   # does nothing 
false || fail $?   # outputs failed... and exits