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

Führt das Ausführen von „exec Echo Some; Echo Test“ in Bash niemals „irgendein Test“ drucken?

Wird exec echo "some "; echo "test" in bash niemals „some test“ ausgeben?

Ich würde eine Bestätigung dieser Frage suchen, da ich ein kleines Shell-Skript schreibe und möchte, dass es nach dem exec nichts fortsetzt Befehl wurde aufgerufen.

Ich denke, dass ich mir keine Sorgen machen müsste, wie ich es verstehe, nach Rücksprache mit:

  • man 3 exec
  • man 1p exec

Die Shell-Skripte werden, wenn sie von der Shell ausgeführt werden, make

  1. die Shell führt das Programm exec aus , die
  2. verwendet den exec*** Familie Systemaufrufe, die die Shell/Bash ersetzen, die das Skript ausgeführt hat, dadurch behindert weitere Aktionen der Shell (die „ersetzt“ wurde)

Wie zuvor dargelegt, besteht das Hauptziel dieser Frage darin, eine Bestätigung für meine Argumentation zu suchen, um zu verhindern, dass irgendetwas im Skript nach der Ausführung auftritt (z. B. echo test ) ausgeführt werden.

Ich würde mich über eine möglichst allgemeine Antwort (POSIX) freuen, aber nur im Falle von Besonderheiten interessiere ich mich am meisten für GNU/Linux und GNU/Bash

Akzeptierte Antwort:

exec beendet das Skript immer if es führt einen Befehl aus und tut dies erfolgreich (nicht im Zusammenhang mit dem Exit-Code des Befehls, sondern mit seinem Start).

exec kann auf sehr nützliche Weise ohne Befehl ausgeführt werden:Um Dateideskriptoren dauerhaft umzuleiten:

exec 3>/path/to/file

Wenn der Befehl nicht gestartet werden kann, hängt das Verhalten der Shell von der Konfiguration ab. bash wird standardmäßig beendet.

Verwenden Sie stattdessen am besten eine Funktion:

safe_exec () {
    cmd="$1"
    if test -z "$cmd" || ! test -f "$cmd" || ! test -x "$cmd"; then
        exit 1
    else
        exec "[email protected]"
    fi
}

safe_exec echo "some "; echo "test"

Linux
  1. Verhindern, dass ein Bash-Skript gleichzeitig ausgeführt wird

  2. Ist ~ immer gleich $home?

  3. Wie kann man die genaue Befehlszeile sehen, die in einer Bash-Instanz ausgeführt wird?

  4. Wie teste ich, ob eine Variable in Bash eine Zahl ist?

  5. Bash/sh 'if else'-Anweisung

Bash-Skripting – Bedingte Anweisungen

Ich möchte alle Befehlszeilenargumente für ein Bash-Skript in einer einzigen Variablen speichern

Ausgabe der cat-Anweisung in der Bash-Skriptschleife drucken

Gibt es in Bash eine Möglichkeit, die letzte Standardausgabe zu echoen/zu drucken? Gibt es eine Variable, der stdout zugewiesen ist?

Was ist die Verwendung von $ # in Bash

Wie testet Bash 'false'?