Il n'y a pas goto
de bash.
Voici une solution de contournement sale trap
qui ne saute qu'en arrière :)
#!/bin/bash -e
trap '
echo I am
sleep 1
echo here now.
' EXIT
echo foo
goto trap 2> /dev/null
echo bar
Production:
$ ./test.sh
foo
I am
here now.
Cela ne devrait pas être utilisé de cette façon, mais uniquement à des fins éducatives. Voici pourquoi cela fonctionne:
trap
utilise la gestion des exceptions pour effectuer le changement de flux de code. Dans ce cas, le trap
capture tout ce qui provoque la sortie du script. La commande goto
n'existe pas et génère donc une erreur, qui quitterait normalement le script. Cette erreur est détectée trap
et 2>/dev/null
masque le message d'erreur qui devrait normalement s'afficher.
Cette implémentation de goto n'est évidemment pas fiable, car toute commande inexistante (ou toute autre erreur, de cette manière), exécuterait la même commande trap. En particulier, vous ne pouvez pas choisir l'étiquette à utiliser.
Fondamentalement, dans le scénario réel, vous n'avez pas besoin d'instructions goto, elles sont redondantes car les appels aléatoires à différents endroits ne font que rendre votre code difficile à comprendre.
Si votre code est invoqué plusieurs fois, pensez à utiliser la boucle et à modifier son flux de travail pour utiliser continue
et break
.
Si votre code se répète, pensez à écrire la fonction et à l'appeler autant de fois que vous le souhaitez.
Si votre code doit sauter dans une section spécifique en fonction de la valeur de la variable, envisagez d'utiliser l' case
instruction.
Si vous pouvez séparer votre code long en morceaux plus petits, envisagez de le déplacer dans des fichiers séparés et appelez-les depuis le script parent.
goto
de bash (au moins ça ditcommand not found
pour moi). Pourquoi? Il y a de fortes chances qu'il existe une meilleure façon de procéder.