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

Was ist Subshell in Linux?

Shell ist Ihnen bereits bekannt. Es ist ein Programm, mit dem Sie Befehle unter Linux ausführen können. Ihre Hauptinteraktion mit der Shell besteht darin, Befehle in einem Terminal auszuführen.

Früher oder später werden Sie auf einen Begriff namens „Subshell“ stoßen, der Sie verwirren kann.

Was ist eine Subshell?

Eine Subshell ist im Grunde eine neue Shell, nur um ein gewünschtes Programm auszuführen. Eine Subshell kann auf die globalen Variablen zugreifen, die von der 'Eltern-Shell' gesetzt wurden, aber nicht auf die lokalen Variablen. Alle Änderungen, die von einer Subshell an einer globalen Variablen vorgenommen werden, werden nicht an die übergeordnete Shell weitergegeben.

Ist das sinnvoll? Wahrscheinlich nicht. Lassen Sie mich die Dinge anhand von Beispielen im Detail erklären.

Hier ist ein einzeiliges Skript, das den Wert der Variablen „var“ anzeigt.

echo $var

Ich setze den Wert dieser Variable auf LHB, was wird Ihrer Meinung nach angezeigt, wenn das Skript ausgeführt wird?

Überraschung! Das Skript sieht den Wert der Variablen var nicht Ich hatte früher eingestellt.

Shell-Skripte werden (standardmäßig) in Subshell ausgeführt

Wieso den? Denn wenn Sie ein Shell-Skript ausführen, wird es in seiner eigenen Shell ausgeführt. Da diese Shell von einer anderen Shell stammt (wo Sie die Variable setzen und wo Sie das Skript ausführen), wird sie Subshell genannt.

Das Shell-Skript konnte den Wert der Variablen nicht sehen, da es sich um eine lokale Variable handelte und der neu erstellten Shell nicht bekannt war. Wenn Sie möchten, dass auf die Variable über ihre Subshells zugegriffen werden kann, müssen Sie den Exportbefehl verwenden und sie in eine globale Variable umwandeln.

Sie können Subshells auch erstellen, indem Sie neue Shells aus Ihren vorhandenen Shells starten. Führen Sie einfach bash aus und Sie befinden sich in einer Unterschale. Sie können den Exit-Befehl verwenden, um die Shell zu schließen/zu verlassen und zur ursprünglichen Shell zurückzukehren.

Stellen Sie sich Subshell nicht als neues Terminalfenster vor. Ich weiß, es ist schwierig, sich das vorzustellen, aber so ist es.

Ich habe die Variable verwendet, um den Unterschied zwischen den beiden Shells (Eltern- und Subshell) anzuzeigen. Die Variable var wurde in diesem Fall nicht exportiert und war daher der Subshell nicht bekannt.

Verschachtelte Subshells

Auf die gleiche Weise können Sie auch verschachtelte Subshells erstellen. Nachdem eine Variable exportiert wurde, bleibt sie in alle nachfolgend erstellten Subshells exportiert.

Sie können den Wert der exportierten Variablen in einer Subshell ändern. Der geänderte Wert wird an die nachfolgenden Subshells weitergegeben (weil die Variable selbst eine globale ist), aber wenn Sie sie verlassen und zur ursprünglichen Shell zurückkehren, wird der ursprüngliche Wert beibehalten.

Wieso den? Weil der Wert der exportierten Variablen in die Subshell kopiert wird. Und es ist die Kopie, die geändert wird (von LHB zu HOC). Der ursprüngliche Wert bleibt in der übergeordneten Shell unverändert.

Denken Sie also daran, es gibt keine Möglichkeit, den Wert einer Variablen in einer übergeordneten Shell von innerhalb einer Subshell zu ändern . Es spielt keine Rolle, ob Sie die Variable exportieren oder nicht, die Variable wird in der übergeordneten Shell nicht geändert.

Bonus-Tipp:Führen Sie ein Shell-Skript in der aktuellen Shell aus

Das normale Verhalten ist, dass ein Shell-Skript in seiner eigenen Shell, d. h. einer Subshell, ausgeführt wird.

Sie können dieses Verhalten ändern und dank des eingebauten Shell-Befehls namens Punkt (.).

ein Shell-Skript in der aktuellen Shell ausführen

Nein, es ist nicht dasselbe wie ein Shell-Skript wie dieses ./script auszuführen. Stattdessen führen Sie es folgendermaßen aus:

. script

Auf diese Weise werden Befehle aus dem Skript von der aktuellen Shell ausgeführt, als ob sie in Terminal eingegeben worden wären, anstatt über ein Skript in einer Subshell ausgeführt zu werden. Skripte können auf diese Weise auf die lokalen Variablen zugreifen.

Ich denke, das ist eine gute Information über Subshell in Linux.

Verstehst du es jetzt besser oder bist du verwirrter denn je? Fühlen Sie sich frei, sich in den Kommentaren als LHB-Mitglied zu äußern.


Linux
  1. So setzen Sie Ihre $PATH-Variable in Linux

  2. Was ist ein Linux-Benutzer?

  3. Warum ist eine Variable in einer Subshell sichtbar?

  4. So ändern Sie die Shell unter Linux

  5. Was ist Red Hat Linux?

Exportbefehl in Linux erklärt

Was ist die Login-Shell in Linux?

Was ist Shebang in Linux Shell Scripting?

Was ist Load Average in Linux?

Was ist eine .bashrc-Datei unter Linux?

Was ist eine .sh-Datei?