GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Jede Möglichkeit, das Bash-Skript zu beenden, aber das Terminal nicht zu verlassen

Ja; Sie können return verwenden statt exit . Sein Hauptzweck ist die Rückkehr von einer Shell-Funktion, aber wenn Sie es innerhalb eines source verwenden -d Skript, es kehrt von diesem Skript zurück.

Wie §4.1 "Bourne Shell Builtins" des Bash Reference Manual sagt es:

     return [n]

Beenden Sie eine Shell-Funktion mit dem Rückgabewert n .Wenn n nicht geliefert wird, ist der Rückgabewert der Exit-Status des zuletzt in der Funktion ausgeführten Befehls. Dies kann auch verwendet werden, um die Ausführung eines Skripts zu beenden, das mit . ausgeführt wird (oder source ) eingebaut und gibt entweder n zurück oder der Exit-Status des letzten im Skript ausgeführten Befehls als Exit-Status des Skripts. Jeder Befehl, der mit RETURN verknüpft ist trap wird ausgeführt, bevor die Ausführung nach der Funktion oder dem Skript fortgesetzt wird. Der Rückgabestatus ist ungleich Null, wenn return wird außerhalb einer Funktion und nicht während der Ausführung eines Skripts von . verwendet oder source .


Anstatt das Skript mit . run2.sh auszuführen , können Sie es mit sh run2.sh ausführen oder bash run2.sh

Eine neue Sub-Shell wird gestartet, um das Skript dann auszuführen, wird sie am Ende des Skripts geschlossen, wobei die andere Shell geöffnet bleibt.


Das "Problem" ist wirklich, dass Sie das Skript beschaffen und nicht ausführen. Wenn Sie eine Datei als Quelle verwenden, wird ihr Inhalt in der aktuellen Shell ausgeführt, anstatt eine Subshell zu erzeugen. Also wirkt sich alles, einschließlich Exit, auf die aktuelle Shell aus.

Anstatt exit zu verwenden , verwenden Sie return .


Sie können nach der return-Anweisung/dem return-Befehl einen zusätzlichen Exit-Befehl hinzufügen, sodass er sowohl für die Ausführung des Skripts von der Befehlszeile als auch für die Quellenangabe vom Terminal funktioniert.

Beispiel-Exit-Code im Skript:

   if [ $# -lt 2 ]; then
     echo "Needs at least two arguments"
     return 1 2>/dev/null
     exit 1
   fi

Die Zeile mit dem exit Der Befehl wird nicht aufgerufen, wenn Sie das Skript nach dem return ausgeben Befehl.

Wenn Sie das Skript ausführen, return Befehl gibt einen Fehler aus. Also unterdrücken wir die Fehlermeldung, indem wir sie an /dev/null weiterleiten .


Linux
  1. Der Unterschied zwischen den Bash-Operatoren [[ Vs [ Vs ( Vs ((?

  2. Bash Echo Die Befehlszeile wird in der Befehlszeile selbst ausgeführt (nicht in einem Skript)?

  3. Der „richtige“ Weg, um zu testen, ob ein Dienst in einem Skript ausgeführt wird?

  4. Wie stoppe ich das Loop Bash-Skript im Terminal?

  5. Warum wird das Bash-Skript nach der Ausführung nicht beendet?

Was ist der beste Weg, um sicherzustellen, dass nur eine Instanz eines Bash-Skripts ausgeführt wird?

Umgebungsvariable TERM nicht gesetzt

Bash:Warum wird das übergeordnete Skript nicht bei SIGINT beendet, wenn das untergeordnete Skript SIGINT abfängt?

Fehler in einem Bash-Skript auslösen

Conda-Befehl funktioniert in der Eingabeaufforderung, aber nicht im Bash-Skript

Was ist der beste Weg, um zu überprüfen, ob ein Volume in einem Bash-Skript gemountet ist?