Je mets en place un script shell avec des menus et sous-menus, des options, etc. Mais sur chaque menu / sous-menu / etc, j'ai besoin d'un choix "Retour au menu principal".
J'ai déjà configuré le menu et cela fonctionne bien, mais j'ai besoin d'un moyen de redémarrer simplement le script à partir de zéro, de réinitialiser toutes les variables, etc., etc.
Ou un moyen de quitter le script actuel et de le redémarrer.
J'ai essayé de faire ça:
ScriptLoc=$(readlink -f "$0")
./ScriptLoc
Mais cela démarre le "nouveau" script à l'intérieur de l '"ancien" script, donc quand je quitte le "nouveau" script, il revient au "vieux" script (si cela a un sens). C'est un script dans une sorte de script.
Quelqu'un a une idée de comment le redémarrer complètement?
command-line
scripts
restart
Moonbloom
la source
la source
$ScriptLoc
toute façon:./ScriptLoc
recherche un script de ce nom dans le répertoire courant.Réponses:
Oui
La
exec
commande bash builtin remplace le programme actuel par un nouveau.la source
Vous pouvez utiliser quelque chose comme ceci:
$(basename $0)
va créer une nouvelle instance du script en cours etexit
quittera l'instance actuelle du script.Voici un script de test qui met en évidence la méthode ci-dessus:
Si vous n'utilisez pas
export count=0
(qui fontcount
pour être une variable d'environnement) et utilisez seulementcount=0
(qui fontcont
une variable de script locale), alors le script ne s'arrêtera jamais.la source
&& exit
ne se fermera que si le script réussit. Donc, si par exemple le script n'est pas exécutable ou a une erreur de syntaxe, cela risque de tourner.Obtenir de manière fiable le script en cours d'exécution est plus difficile que vous ne le pensez. Voir http://mywiki.wooledge.org/BashFAQ/028 .
Au lieu de cela, vous pouvez faire quelque chose comme ceci:
Fondamentalement, vous exécutez la fonction main_menu dans un sous-shell, donc si vous quittez le main_menu, ou l'un des sous-menus, vous quittez le sous-shell, pas le shell principal. l'état de sortie 255 est choisi ici pour signifier "recommencer". Tout autre état de sortie sortira de la boucle par ailleurs infinie.
la source