Vererbung von Variablen und Aliasen in einer Child-Shell testen
In diesem Schritt untersuchen Sie, wie sich Variablen und Aliase verhalten, wenn Sie eine neue Shell aus Ihrer aktuellen Shell heraus starten. Diese neue Shell wird als "Child-Shell" (untergeordnete Shell) bezeichnet, und die ursprüngliche Shell ist die "Parent-Shell" (übergeordnete Shell). Dieses Konzept ist entscheidend, um zu verstehen, wie Shell-Umgebungen strukturiert sind und wie Skripte ausgeführt werden. Wir werden testen, ob die Variablen flower und nut aus dem vorherigen Schritt an eine Child-Shell weitergegeben oder "vererbt" werden.
Zuerst ermitteln wir die Prozess-ID (PID) unserer aktuellen Parent-Shell. Jeder Prozess unter Linux hat eine eindeutige PID. Sie können diese mit dem Befehl echo $$ anzeigen.
echo $$
Ihre Ausgabe wird eine Zahl sein, die die PID Ihrer aktuellen Shell darstellt. Zum Beispiel:
123
Starten Sie nun eine Child-Shell, indem Sie einfach zsh eingeben und die Eingabetaste drücken. Dies erstellt einen neuen Shell-Prozess innerhalb Ihres aktuellen Prozesses.
zsh
Sie befinden sich nun in einer neuen Shell-Sitzung. Um dies zu bestätigen, können wir den Befehl ps -f verwenden, der detaillierte Prozessinformationen anzeigt, einschließlich der Parent Process ID (PPID).
ps -f
Schauen Sie sich die Ausgabe an. Sie werden zwei zsh-Prozesse sehen. Die PID des neuen zsh-Prozesses sollte eine PPID haben, die mit der PID der Parent-Shell übereinstimmt, die Sie sich zuvor notiert haben.
UID PID PPID C STIME TTY TIME CMD
labex 123 1 0 10:00 pts/0 00:00:00 zsh
labex 456 123 0 10:01 pts/0 00:00:00 zsh
labex 457 456 0 10:01 pts/0 00:00:00 ps -f
In diesem Beispiel ist die neue Shell (PID 456) ein Kind der ursprünglichen Shell (PPID 123).
Testen wir nun die Variablen. Versuchen Sie in dieser Child-Shell, den Wert der lokalen Variablen flower anzuzeigen.
echo $flower
Der Befehl erzeugt keine Ausgabe. Das liegt daran, dass lokale Variablen auf die Shell beschränkt sind, in der sie erstellt wurden, und nicht an Child-Shells vererbt werden.
Überprüfen Sie als Nächstes die Umgebungsvariable nut.
echo $nut
Diesmal gibt die Shell den Wert der Variablen aus:
almond
Dies zeigt, dass Umgebungsvariablen im Gegensatz zu lokalen Variablen an Child-Shells vererbt werden.
Kehren wir nun mit dem Befehl exit zur Parent-Shell zurück.
exit
Sie sind nun zurück in Ihrer ursprünglichen Shell. Führen wir einen ähnlichen Test mit einem Alias durch. Ein Alias ist eine Abkürzung für einen Befehl. Erstellen Sie einen Alias namens ldetc, der ls -ld /etc ausführt.
alias ldetc='ls -ld /etc'
Überprüfen Sie, ob der Alias erstellt wurde, indem Sie alias eingeben.
alias ldetc
Sie sollten die Definition Ihres Alias sehen:
ldetc='ls -ld /etc'
Testen Sie nun den Alias, indem Sie ihn ausführen.
ldetc
Der Befehl führt ls -ld /etc aus und zeigt Ihnen die Details des Verzeichnisses /etc.
drwxr-xr-x 1 root root 4096 Oct 10 10:00 /etc
Öffnen Sie nun eine weitere Child-Shell, um zu sehen, ob der Alias vererbt wird.
zsh
Versuchen Sie in der neuen Child-Shell, den Alias ldetc zu verwenden.
ldetc
Sie erhalten eine Fehlermeldung, da Aliase, genau wie lokale Variablen, nicht an Child-Shells vererbt werden.
zsh: command not found: ldetc
Kehren Sie zur Parent-Shell zurück.
exit
Zum Abschluss räumen wir auf, indem wir den Alias mit dem Befehl unalias aus der Parent-Shell entfernen.
unalias ldetc
Verifizieren Sie die Entfernung, indem Sie versuchen, ihn erneut aufzulisten.
alias ldetc
Es wird nichts zurückgegeben.
Diese Übung hat Ihnen ein wichtiges Prinzip des Shell-Verhaltens gezeigt: Umgebungsvariablen werden an Child-Prozesse vererbt, lokale Variablen und Aliase hingegen nicht.