Testen der Vererbung von Variablen und Aliassen in einer Kind-Shell
In diesem Schritt untersuchen Sie, wie sich Variablen und Aliase verhalten, wenn Sie eine neue Shell aus Ihrer aktuellen starten. Diese neue Shell wird als "Kind-Shell" bezeichnet, und die ursprüngliche Shell ist die "Eltern-Shell". Dieses Konzept ist entscheidend für das Verständnis, 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 Kind-Shell weitergegeben oder "vererbt" werden.
Zuerst identifizieren wir die Prozess-ID (PID) unserer aktuellen Eltern-Shell. Jeder Prozess in Linux hat eine eindeutige PID. Sie können sie mit dem Befehl echo $$
anzeigen.
echo $$
Ihre Ausgabe wird eine Zahl sein, die die PID Ihrer aktuellen Shell ist. Zum Beispiel:
123
Starten Sie nun eine Kind-Shell, indem Sie einfach zsh
eingeben und Enter drücken. Dies erstellt einen neuen Shell-Prozess innerhalb Ihres aktuellen.
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 Eltern-Prozess-ID (PPID).
ps -f
Betrachten Sie die Ausgabe. Sie werden zwei zsh
-Prozesse sehen. Die PID des neuen zsh
-Prozesses sollte eine PPID haben, die mit der PID der zuvor notierten Eltern-Shell übereinstimmt.
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 Kind-Shell, den Wert der lokalen Variable 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 werden, und nicht von Kind-Shells geerbt werden.
Überprüfen Sie als Nächstes die Umgebungsvariable nut
.
echo $nut
Dieses Mal gibt die Shell den Wert der Variable aus:
almond
Dies zeigt, dass Umgebungsvariablen, im Gegensatz zu lokalen Variablen, von Kind-Shells geerbt werden.
Kehren wir nun zur Eltern-Shell zurück, indem wir den Befehl exit
verwenden.
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
an.
drwxr-xr-x 1 root root 4096 Oct 10 10:00 /etc
Öffnen Sie nun eine weitere Kind-Shell, um zu sehen, ob der Alias geerbt wird.
zsh
Versuchen Sie innerhalb der neuen Kind-Shell, den Alias ldetc
zu verwenden.
ldetc
Sie erhalten eine Fehlermeldung, da Aliase, wie lokale Variablen, nicht von Kind-Shells geerbt werden.
zsh: command not found: ldetc
Kehren Sie zur Eltern-Shell zurück.
exit
Schließlich räumen wir auf, indem wir den Alias mit dem Befehl unalias
aus der Eltern-Shell entfernen.
unalias ldetc
Überprüfen 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 von Kind-Prozessen geerbt, lokale Variablen und Aliase jedoch nicht.