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

Linux-exec-Befehl mit Beispielen

Einführung

Das Linux exec Befehl führt einen Shell-Befehl aus, ohne einen neuen Prozess zu erstellen. Stattdessen ersetzt es die derzeit geöffnete Shell-Operation. Je nach Verwendung des Befehls exec hat unterschiedliche Verhaltensweisen und Anwendungsfälle.

Dieser Artikel demonstriert die Verwendung von exec Befehl unter Linux.

Voraussetzungen

  • Zugriff auf die Befehlszeile/das Terminal als sudo.
  • Grundlegendes Verständnis von Linux-Terminalbefehlen (verwenden Sie unseren Linux-Befehls-Spickzettel).
  • Ein Linux-Texteditor wie nano.

Linux exec-Befehlssyntax

Die exec Befehlssyntax ist:

exec [options] [command [arguments]] [redirection]

Je nach Anzahl der Argumente verhält sich der Befehl unterschiedlich:

  • Wenn ein Argument vorhanden ist, wird exec Befehl ersetzt die aktuelle Shell durch das ausgeführte Programm. In einem Bash-Skript werden alle nachfolgenden Befehle nicht ausgeführt .
  • Wenn kein Befehlsargument vorhanden ist, erfolgen alle Umleitungen in der aktuellen Shell.

Die exec Der Befehl kehrt nie zum ursprünglichen Prozess zurück, es sei denn, es liegt ein Fehler vor oder der Befehl wird in einer Subshell ausgeführt.

Linux-exec-Befehlsoptionen

Nachfolgend finden Sie eine kurze Erklärung aller exec Optionen:

Option Beschreibung
-c Führt den Befehl in einer leeren Umgebung aus.
-l Übergibt einen Bindestrich (- ) als nulltes Argument.
-a [name] Besteht [name] als nulltes Argument.

Lesen Sie weiter, um zu sehen, wie exec funktioniert anhand von Beispielen.

Linux exec-Befehlsbeispiele

Die folgenden Beispiele demonstrieren das Verhalten von exec Befehl im Terminal und über Bash-Skripte.

Grundlegende Verwendung (Prozessersetzung)

Um zu sehen, wie exec funktioniert, gehen Sie wie folgt vor:

1. Öffnen Sie das Terminal und listen Sie die laufenden Prozesse auf:

ps

Die Ausgabe zeigt die aktuell ausgeführte Bash-Shell und den ps Befehl. Die Bash-Shell hat eine eindeutige PID.

2. Überprüfen Sie zur Bestätigung die aktuelle Prozess-ID mit:

echo $$

Die PID ist dieselbe wie die Ausgabe von ps Befehl, der anzeigt, dass dies der aktuell laufende Bash-Prozess ist.

3. Führen Sie nun exec aus und übergeben Sie den Schlafbefehl für hundert Sekunden:

exec sleep 100

Die sleep Befehl wartet 100 Sekunden.

4. Listen Sie in einem anderen Terminal-Tab alle derzeit laufenden Prozesse auf und suchen Sie nach sleep Befehl:

ps -ae | grep sleep

Die PID für den Prozess ist dieselbe wie die Bash-Shell-PID und gibt exec an Befehl ersetzte den Bash-Shell-Prozess.

Die Bash-Sitzung (Terminal-Tab) wird geschlossen, wenn die 100 Sekunden abgelaufen sind und der Prozess endet.

Aktuelle Shell-Sitzung ersetzen

Verwenden Sie den exec Befehl zum Ersetzen der aktuellen Shell-Sitzung:

1. Überprüfen Sie die aktuelle Shell-PID:

echo $$

2. Verwenden Sie exec um zur Bourne Shell zu wechseln:

exec sh

3. Überprüfen Sie in einem anderen Tab die PID für den Bourne-Shell-Prozess:

ps -ae | grep "\bsh\b"

Hinweis: Der \b in grep ist Regex zum Abgleichen von Wortgrenzen, was eine exakte Übereinstimmung von sh ermöglicht in der Ausgabe. Erfahren Sie mehr in unserem Grep Regex-Tutorial.

Der Befehl ersetzt den Bash-Prozess. Beim Beenden der Bourne-Shell wird die Terminalsitzung vollständig beendet.

Programmaufrufe mit exec in Bash-Skripten

Um zu sehen, wie exec in Bash-Skripten funktioniert, gehen Sie wie folgt vor:

1. Öffnen Sie einen Texteditor wie Nano und erstellen Sie eine Skriptdatei:

nano [script name]

2. Fügen Sie den folgenden Code ein:

#!/bin/bash

while true
do
        echo "1. Update "
        echo "2. Upgrade "
        echo "3. Exit"
   read Input
   case "$Input" in
        1) exec sudo apt update ;;
        2) exec sudo apt upgrade  ;;
        3) break
   esac
done

Das Skript macht Folgendes:

  • Zeile 3 erzeugt ein unendliches while Schleife.
  • Zeilen 5-7 Drucken Sie die drei möglichen Optionen aus.
  • Zeile 8 liest die Eingabe des Benutzers in die Variable $Input .
  • Zeile 9 startet ein case -Anweisung, die die Eingabe des Benutzers überprüft.
  • Zeilen 10-11 Führen Sie apt update aus oder apt upgrade Befehl anstelle der aktuellen Shell. Wenn der Update- oder Upgrade-Vorgang endet, wird die Terminalsitzung beendet.
  • Zeile 12 verwendet den break -Anweisung zum Verlassen des unendlichen while Schleife und beendet das Skript. Die Sitzung kehrt wie gewohnt zur aktuellen Shell zurück.

3. Speichern Sie das Skript und schließen Sie Nano.

4. Führen Sie das Bash-Skript in der aktuellen Umgebung aus, um die Ergebnisse anzuzeigen:

. [script name]

Das Ausführen des Skripts mit dem Quellbefehl wendet das Skriptverhalten auf die aktuelle Bash-Shell an. Verwenden Sie exec um Bash-Skripte in anderen Programmen für einen sauberen Exit auszuführen.

Bash-Skripte protokollieren

Der exec Der Befehl findet Verwendung bei der Manipulation von Dateideskriptoren für die Fehlerprotokollierung in Bash-Skripten. Die standardmäßigen Linux-Dateideskriptoren sind:

  • stdin (0) - Standard in
  • stdout (1) - Standardausgabe
  • stderr (2) - Standardfehler

Verwenden Sie den exec Befehl und leiten Sie die Dateideskriptoren in eine Datei um, um Protokolle zu erstellen. Führen Sie die folgenden Schritte aus, um zu sehen, wie die Protokollierung funktioniert:

1. Erstellen Sie ein Beispiel-Bash-Skript:

nano logging.sh

2. Fügen Sie den Code in die Datei ein:

#!/bin/bash

# Create test.log file
touch test.log

# Save test.log to log_file variable
log_file="test.log"

# Redirect stdin to $log_file
exec 1>>$log_file

# Redirect stderr to the same place as stdin
exec 2>&1

echo "This line is added to the log file"
echo "And any other lines after"
eho "This line has an error and is logged as stderr"

Das Skript leitet alle Befehlsausgaben und Fehler in dieselbe Datei um (test.log ).

3. Speichern Sie das Skript und schließen Sie den Texteditor.

4. Ändern Sie die Skriptberechtigung in ausführbar:

chmod +x logging.sh

5. Führen Sie das Skript aus:

./logging.sh

Das Skript gibt keinen Code aus. Stattdessen werden alle Ausgaben in test.log protokolliert Datei.

6. Verwenden Sie den cat-Befehl, um die test.log anzuzeigen Dateiinhalt:

cat test.log

Die Protokolldatei enthält alle Standardausgaben und Fehlermeldungen. Verwenden Sie exec um Skripte zu debuggen und je nach Situation Eingaben, Ausgaben oder Fehler zu protokollieren.

Führen Sie Skripte in einer sauberen Umgebung aus

Die -c Option für exec Befehl schafft eine saubere Umgebung. Führen Sie zur Demonstration im Terminal Folgendes aus:

1. Starten Sie eine neue Bash-Shell-Sitzung:

bash

2. Verwenden Sie den printenv Befehl zum Drucken aller Umgebungsvariablen in der aktuellen Bash-Shell:

printenv

Der Befehl gibt alle Umgebungsvariablen für die aktuelle Bash-Shell-Sitzung aus.

3. Führen Sie denselben Befehl mit exec aus mit dem -c Flagge:

exec -c printenv

Der Befehl printenv läuft in einer sauberen Umgebung und es werden keine Variablen an die Konsole ausgegeben. Verwenden Sie den -c Option zum Ausführen von Skripten oder Befehlen in sauberen Umgebungen.

exec mit find-Befehl

Der Find-Befehl in Linux hat den exec Befehl als Option zum Ausführen einer Aktion für erkannten Inhalt. Die folgende Zeile führt beispielsweise chmod aus Befehl auf find Befehlsergebnisse:

sudo find ~ -name "test.log" -exec chmod +x '{}' \;

Der find Befehl durchsucht das Home-Verzeichnis (~ ) für die test.log Datei und führt die Berechtigungsänderung aus.

Fazit

Nachdem Sie die Beispiele aus diesem Tutorial befolgt haben, sollten Sie wissen, wie Sie exec verwenden Befehl effektiv in Bash-Skripten.

Als Nächstes erfahren Sie, wie Sie mit Crontab automatisch einen Job beim Neustart ausführen.


Linux
  1. wc Linux-Befehl mit Beispielen

  2. Linux-Sortierungsbefehl mit Beispielen

  3. Linux Tee-Befehl mit Beispielen

  4. Linux-Kopfbefehl mit Beispielen

  5. JQ-Befehl in Linux mit Beispielen

Linux-CD-Befehl mit Beispielen

Linux-Uhrbefehl mit Beispielen

Wartebefehl in Linux mit Beispielen

Linux-Exportbefehl mit Beispielen

Linux-IP-Befehl mit Beispielen

Linux-exec-Befehl mit Beispielen