Quelle est la différence entre l'instruction return
et exit
dans les fonctions BASH par rapport aux codes de sortie?
Réponses
Trop de publicités?return
renvoie une valeur à partir d'une fonction. exit
abandonne le shell courant.
EDIT:
Comme pour votre travail d'édition de la question, concernant les codes de sortie, return
n'a rien à voir avec les codes de sortie. Codes de sortie sont destinés à des applications et des scripts, pas de fonctions. Donc, à cet égard, le seul mot clé qui définit le code de sortie du script (celui qui peut être pris par le programme appelant à l'aide de l' $?
variable shell) est - exit
.
Comme indiqué, return
entraînera la sortie de la fonction en cours où exit
entraînera la fin du script au point où il est appelé. Voici un exemple de programme pour vous aider à expliquer ceci:
#!/bin/bash
retfunc()
{
echo "this is retfunc()"
return 1
}
exitfunc()
{
echo "this is exitfunc()"
exit 1
}
retfunc
echo "We are still here"
exitfunc
echo "We will never see this"
Sortie
$ ./test.sh
this is retfunc()
We are still here
this is exitfunc()
Je ne pense pas que quelqu'un a vraiment bien répondu à la question parce qu'ils ne décrivent pas comment les deux sont utilisés. OK je crois que nous savons que la sortie tue le script, si jamais on l'appelle, et vous pouvez attribuer un statut à elle aussi bien comme sortie ou de sortie 0 ou à la sortie 7 et ainsi de suite. Ceci peut être utilisé pour déterminer la façon dont le script a été forcé de s'arrêter si on l'appelle par un autre script, etc. Assez à la sortie.
de retour lorsque l'appel sera de retour à la valeur spécifiée pour indiquer la fonction du comportement, généralement de 1 ou de 0. Par exemple:
#!/bin/bash
isdirectory() {
if [ -d "$1" ]
then
return 0
else
return 1
fi
echo "you will not see anything after the return like this text"
}
case comme ceci:
if isdirectory $1; then echo "is directory"; else echo "not a directory"; fi
ou comme ceci:
isdirectory || echo "not a directory"
Dans cet exemple, le test peut être utilisé pour indiquer si le répertoire a été trouvé. notez que quoi que ce soit après le retour ne sera pas exécutée dans la fonction. 0 est vrai, mais faux est de 1 dans la coquille, différent des autres prog langs.
Pour plus d'informations sur les fonctions: http://www.linuxjournal.com/content/return-values-bash-functions
Rappelez-vous, les fonctions sont à l'intérieur d'un script et normalement retourner d'où ils avaient été appelés à l'aide de l'instruction return. L'appel d'un script externe est une tout autre affaire, et les scripts s'arrêtent généralement avec un rapport de sortie.
La différence "entre le retour et la sortie de déclaration en BASH fonctions en ce qui concerne les codes de sortie" est très peu. Les deux renvoient un état, pas de valeurs en soi. Un état de zéro indique la réussite, tandis que tout autre statut (de 1 à 255) indique une défaillance. L'instruction de retour sera de retour pour le script d'où il a été appelé, alors que la sortie de la déclaration de la fin de l'intégralité du script à partir de là où il est rencontré.
return 0 # retourne à l'endroit où la fonction a été appelée. $? contient 0 (succès).
return 1 # retourne à l'endroit où la fonction a été appelée. $? contient 1 (échec).
exit 0 # ferme le script complètement. $? contient 0 (succès).
exit 1 # ferme le script complètement. $? contient 1 (échec).
Si votre fonction se termine tout simplement avec aucune instruction de retour, l'état de la dernière commande exécutée est retourné en tant que code d'état (et sera placée dans $?).
Rappelez-vous, le retour et la sortie de redonner un code d'état de 0 à 255, disponible dans $?. Vous ne pouvez pas les trucs tout autre objet dans un code de statut (par exemple, le retour "chat"); il ne fonctionnera pas. Mais, un script peut passer à 255 différentes raisons de l'échec en utilisant des codes d'état.
Vous pouvez définir des variables contenues dans le script d'appel, ou à l'écho des résultats dans la fonction et l'utilisation comamnd substitution dans le script d'appel; mais le retour et la sortie sont à transmettre les codes d'état, et non pas les valeurs ou computatoin résultats que l'on peut attendre dans un langage de programmation C.