Ich richte ein Shell-Skript mit Menüs und Untermenüs, Optionen usw. ein. In jedem Menü / Untermenü / usw. benötige ich jedoch die Option "Zurück zum Hauptmenü".
Ich habe bereits das Menü eingerichtet und es funktioniert gut, aber ich brauche eine Möglichkeit, das Skript einfach von Grund auf neu zu starten, alle Variablen zurückzusetzen usw. usw.
Oder eine Möglichkeit, das aktuelle Skript zu beenden und erneut zu starten.
Ich habe versucht, dies zu tun:
ScriptLoc=$(readlink -f "$0")
./ScriptLoc
Aber das startet das "neue" Skript innerhalb des "alten" Skripts. Wenn ich das "neue" Skript beende, kehre ich zum "alten" Skript zurück (wenn das Sinn macht). Es ist ein Drehbuch in einem Drehbuch.
Hat jemand eine Idee, wie man es komplett neu startet?
command-line
scripts
restart
Mondblüte
quelle
quelle
$ScriptLoc
jedenfalls so sein:./ScriptLoc
Sucht nach einem Skript mit diesem Namen im aktuellen Verzeichnis.Antworten:
Ja mach
Der
exec
Befehl bash builtin ersetzt das aktuelle Programm durch ein neues.quelle
Sie können so etwas verwenden:
$(basename $0)
erstellt eine neue Instanz des aktuellen Skripts und beendetexit
die aktuelle Instanz des Skripts.Hier ist ein Testskript, das die obige Methode hervorhebt:
Wenn Sie nicht verwenden
export count=0
(wodurchcount
eine Umgebungsvariable erstellt wird) und nur verwendencount=0
(wodurchcont
eine lokale Skriptvariable erstellt wird), wird das Skript niemals angehalten.quelle
&& exit
wird nur beendet, wenn das Skript erfolgreich ist. Wenn das Skript beispielsweise nicht ausführbar ist oder einen Syntaxfehler aufweist, dreht sich dies wahrscheinlich nur.Es ist schwieriger, das Skript, das gerade ausgeführt wird, zuverlässig abzurufen, als Sie vielleicht denken. Siehe http://mywiki.wooledge.org/BashFAQ/028 .
Stattdessen können Sie Folgendes tun:
Grundsätzlich führen Sie die Funktion main_menu in einer Subshell aus. Wenn Sie also das main_menu oder eines der Submenüs verlassen, verlassen Sie die Subshell und nicht die Mainshell. Der Beendigungsstatus 255 wird hier als "wieder gehen" ausgewählt. Jeder andere Beendigungsstatus löst sich aus der sonst unendlichen Schleife.
quelle