Il n'y a pas gotode bash.
Voici une solution de contournement sale trapqui 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:
traputilise la gestion des exceptions pour effectuer le changement de flux de code. Dans ce cas, le trapcapture tout ce qui provoque la sortie du script. La commande goton'existe pas et génère donc une erreur, qui quitterait normalement le script. Cette erreur est détectée trapet 2>/dev/nullmasque 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 continueet 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' caseinstruction.
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.
gotode bash (au moins ça ditcommand not foundpour moi). Pourquoi? Il y a de fortes chances qu'il existe une meilleure façon de procéder.