En bash, il y a un équivalent de die “error msg”
En perl, vous pouvez quitter avec une erreur msg avec die "some msg"
. Est-t-il un équivalent simple de commande de bash? Maintenant, je suis de la réalisation de cette aide de commandes: echo "some msg" && exit 1
Vous devez vous connecter pour publier un commentaire.
Vous pouvez rouler votre propre assez facilement:
printf %s "${@+$@$'\n'}"
- En d'autres termes, imprimer les arguments suivi par un saut de ligne si elles existent."$*"
probablement plus de sens que"$@"
. Le comportement sera identique dans la plupart des cas, mais en diffère pardie -n Oops
(non pas que vous voulez faire).Voici ce que j'utilise. Il est trop petit pour mettre dans une bibliothèque donc je dois avoir tapé des centaines de fois ...
Utilisation:
die 127 "Syntax error"
C'est très proche de la fonction perl à "mourir" (mais avec le nom de la fonction):
Et bash manière de mourir si construire-dans la fonction est un échec (avec le nom de la fonction)
Donc, Bash est de garder toutes les information nécessaire à plusieurs variables d'environnement:
${1-Died}
-- avec cela, vous pouvez même passer une chaîne vide et qu'il fonctionne comme vous le souhaitez.Yep, c'est à peu près la façon dont vous le faites.
Vous pouvez utiliser un point-virgule ou le retour à la ligne au lieu de &&, puisque vous voulez quitter ou non l'écho réussit (même si je ne suis pas sûr de ce qui pourrait faire échouer).
De la programmation en shell signifie en utilisant beaucoup de peu de commandes (certaines commandes intégrées, certains petits programmes) que faire une chose bien et la connexion avec fichier de redirection, le code de sortie de la logique et d'autres de la colle.
Il peut sembler bizarre si vous avez l'habitude de langues où tout est fait à l'aide de fonctions ou de méthodes, mais vous vous habituez à elle.
CMD1 || (echo 'ERROR MSG'; exit 1); CMD2; CMD3
. Maintenant, si CMD1 échoue, j'attends l'écho et de sortie afin de prendre place, et le script de sortie. Mais maintenant, quand CMD1 échoue, CMD2 et CMD3 sont effectivement exécutées avant l'écho. Il s'agit, selon le journal des erreurs. Bizarre ou pas?{}
au lieu de()
pour éviter le shell interne est exécuté problème. Aussi, c'est une bonne idée d'envoyer les erreurs vers stderr vers stdout:CMD1 || { echo 'ERROR MSG' >&2; exit 1; }; CMD2; CMD3