Vous pouvez écrire une fonction qui retourne le statut donné en argument, ou 255
si aucun n'est donné. (Je l'appelle ret
car il "renvoie" sa valeur.)
ret() { return "${1:-255}"; }
et utilisez ret
à la place de votre appel à exit
. Cela évite l'inefficacité de la création du sous-shell dans la réponse actuellement acceptée.
Quelques mesures.
time bash -c 'for i in {1..10000} ; do (exit 3) ; done ; echo $?'
sur ma machine prend environ 3,5 secondes.
time bash -c 'ret(){ return $1 ; } ; for i in {1..10000} ; do ret 3 ; done ; echo $?'
sur ma machine prend environ 0,051 seconde, 70 fois plus vite. Mettre dans la gestion par défaut le laisse encore 60 fois plus rapide. De toute évidence, la boucle a des frais généraux. Si je change le corps de la boucle pour qu'il soit juste :
ou true
alors le temps est divisé par deux à 0,025, une boucle complètement vide est une syntaxe invalide. L'ajout ;:
à la boucle montre que cette commande minimale prend 0,007 seconde, donc la surcharge de la boucle est d'environ 0,018. La soustraction de cette surcharge des deux tests montre que la ret
solution est plus de 100 fois plus rapide.
C'est évidemment une mesure synthétique, mais les choses s'additionnent. Si vous faites tout 100 fois plus lentement que nécessaire, vous vous retrouvez avec des systèmes lents. 0,0
exec exit 3
n'est pas bueno, je reçois"exec: exit: not found"