Zum Inhalt springen

Linux/Scripts/Subshells

Aus Foxwiki
Version vom 20. Dezember 2025, 23:20 Uhr von Dirkwagner (Diskussion | Beiträge) (Die Seite wurde neu angelegt: „== Subshells == Zwar war schon häufig die Rede von einer Subshell, aber es wurde nie richtig darauf eingegangen, wie Sie explizit eine Subshell in Ihrem Script starten können ; Syntax ( kommando1 kommando_n ) oder auch als Einzeiler (aber dann bitte die Leerzeichen beachten): ( kommando1 ; ... ; kommando_n ) Eine Subshell erstellen Sie, wenn Sie Kommandos zwischen runden Klammern gruppieren * Hierbei startet das Script einfach eine neue…“)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)

Subshells

Zwar war schon häufig die Rede von einer Subshell, aber es wurde nie richtig darauf eingegangen, wie Sie explizit eine Subshell in Ihrem Script starten können

Syntax
(
   kommando1
   
   kommando_n
)

oder auch als Einzeiler (aber dann bitte die Leerzeichen beachten):

( kommando1 ; ... ; kommando_n )

Eine Subshell erstellen Sie, wenn Sie Kommandos zwischen runden Klammern gruppieren

  • Hierbei startet das Script einfach eine neue Shell, welche die aktuelle Umgebung mitsamt den Variablen übernimmt, führt die Befehle aus und beendet sich dann bei Ausführung des letzten Kommandos wieder und kehrt zum Script zurück
  • Als Rückgabewert wird der Exit-Code des zuletzt ausgeführten Kommandos zurückgegeben
  • Die Variablen, die Sie in einer Subshell verändern oder hinzufügen, haben keine Auswirkungen auf die Variablen des laufenden Scripts
  • Sobald sich die Subshell also verändert, verlieren die Werte in der Subshell ihre Bedeutung und dem laufenden Script (bzw. der laufenden Shell) steht nach wie vor die Umgebung zur Verfügung, die vor dem Starten der Subshell vorlag
  • Diese Technik nutzt die Shell u.a. auch mit dem Here-Dokument aus
Beispiel
 # Name: subshell
 a=1
 b=2
 c=3
 echo "Im Script: a=$a; b=$b; c=$c"
 # Eine Subshell starten
 (
    echo "Subshell : a=$a; b=$b; c=$c"
    # Werte verändern
    a=3 ; b=6 ; c=9
    echo "Subshell : a=$a; b=$b; c=$c"
 )
 # Nach der Subshell wieder 
 echo "Im Script: a=$a; b=$b; c=$c"

Script Ausführung

 ./subshell
 Im Script: a=1; b=2; c=3
 Subshell : a=1; b=2; c=3
 Subshell : a=3; b=6; c=9
 Im Script: a=1; b=2; c=3
Achtung
Häufig wird eine Subshell, die zwischen runden Klammern steht, irrtümlicherweise mit den geschweiften Klammern gleichgestellt
  • Kommandos, die zwischen geschweiften Klammern stehen, werden als eine Gruppe zusammengefasst, wodurch Funktionen ja eigentlich erst ihren Sinn bekommen
  • Befehlsgruppen, die in geschweiften Klammern stehen, laufen in derselben Umgebung (also auch Shell) ab, in der auch das Script ausgeführt wird