Est-ce que l'exécution de exec echo "some "; echo "test"
dans bash n'affiche jamais "un test" ?
Je demanderais confirmation à cette question, car j'écris un petit script shell et je voudrais qu'il ne continue rien après le exec
la commande a été appelée.
Je pense que je n'aurais pas besoin de m'inquiéter, d'après ce que j'ai compris, après avoir consulté :
man 3 exec
man 1p exec
Les scripts shell, lorsqu'ils sont exécutés par le shell, feront
- le shell exécute le programme
exec
, qui - utilise le
exec***
les appels système de la famille qui remplacent le shell/bash qui a exécuté le script, par cette entrave actions ultérieures du shell (qui a été "remplacé")
Comme indiqué précédemment, l'objectif principal de cette question est de rechercher la confirmation de mon raisonnement afin d'éviter que quoi que ce soit dans le script ne se produise après l'exécution (comme echo test
) serait exécuté.
J'apprécierais une réponse générale (POSIX), dans la mesure du possible, mais juste en cas de particularités, je suis plus intéressé par GNU/Linux et GNU/Bash
Réponse acceptée :
exec
termine toujours le script si il exécute une commande et le fait avec succès (non lié au code de sortie de la commande mais à son démarrage).
exec
peut être exécuté sans commande de manière très utile :Pour rediriger en permanence les descripteurs de fichiers :
exec 3>/path/to/file
Si la commande ne peut pas être démarrée, le comportement du shell dépend de la configuration. bash
sort par défaut.
Il peut être préférable pour vous d'utiliser une fonction à la place :
safe_exec () {
cmd="$1"
if test -z "$cmd" || ! test -f "$cmd" || ! test -x "$cmd"; then
exit 1
else
exec "[email protected]"
fi
}
safe_exec echo "some "; echo "test"