Die Befehlszeile · Übung
Werte, die in der Sitzung leben
Manche Werte gehören nicht in einen Befehl: in welchem Modus ein Werkzeug laufen soll, welche Sprache es verwenden oder wohin es ein vorläufiges Ergebnis schreiben soll.
Das Betriebssystem gibt jedem Prozess für solche Werte eine Gruppe benannter Umgebungsvariablen. Ein Programm erbt eine Kopie vom Prozess, der es startet. Diese Kopie in eine Richtung ist die zentrale Idee. Sie erklärt, wie ein Programm den Wert erhält, warum ein anderes Terminal ihn nicht plötzlich sieht und warum er am Sitzungsende verschwindet.
Ein Shell-Wert ist nicht automatisch ein Umgebungswert
PowerShell hat gewöhnliche Variablen für seine eigene Arbeit und ein Präfix $env: für Werte, die Kindprozesse erben sollen:
$localLabel = 'only this PowerShell'
Write-Output $localLabel
$env:COURSE_LABEL = 'visible to a child'
Write-Output $env:COURSE_LABEL
Beide Werte sind in der aktuellen PowerShell-Sitzung sichtbar. Nur COURSE_LABEL wurde in die Umgebung aufgenommen, die ein gestartetes Programm erhält.
Eine Zuweisung erzeugt zunächst eine Shell-Variable, die dieser Shell gehört:
LOCAL_LABEL="only this shell"
printenv LOCAL_LABEL
Die Shell kennt den Wert. Das getrennte Programm printenv erhält aber keinen Umgebungswert mit diesem Namen. export nimmt einen Wert in die Umgebung auf, die späteren Kindprozessen übergeben wird:
export COURSE_LABEL="visible to a child"
printenv COURSE_LABEL
Eine Zuweisung erzeugt zunächst eine Shell-Variable, die dieser Shell gehört:
LOCAL_LABEL="only this shell"
printenv LOCAL_LABEL
Die Shell kennt den Wert. Das getrennte Programm printenv erhält aber keinen Umgebungswert mit diesem Namen. export nimmt einen Wert in die Umgebung auf, die späteren Kindprozessen übergeben wird:
export COURSE_LABEL="visible to a child"
printenv COURSE_LABEL
Die Kopie wird nur in eine Richtung weitergegeben, nach unten. Ein Kind erhält beim Start die Umgebung seines Elternprozesses. Keine Änderung des Kindes kann zum Elternprozess zurückreichen. Ein bereits geöffnetes Terminalfenster bekommt auch keine Aktualisierung aus einem anderen Fenster.

Nichts davon schreibt eine Startdatei oder dauerhafte Systemeinstellung um. Schließe die Sitzung, und eine neue beginnt ohne die hinzugefügten Werte. Dauerhafte Konfiguration liegt bewusst außerhalb dieses Kurses. Jede künftige Sitzung zu verändern verdient eigene Anweisungen zur Wiederherstellung.
Übung: Ein Kindprogramm festhalten lassen, was es erhalten hat
Der Arbeitsbereich enthält ein bereitgestelltes Programm namens environment-check.py. Du lernst hier nicht seine Python-Syntax. Es dient als Messgerät. Wenn ein Kindprozess COURSE_MARKER erhält, schreibt das Programm den beobachteten Wert nach destination/environment-check.txt.
Verwende zuerst Reset und bleibe danach in einer Terminalsitzung bei /workspace.
$env:COURSE_MARKER = 'environment ready'
Write-Output $env:COURSE_MARKER
python ./environment-check.py
Get-Content -LiteralPath ./destination/environment-check.txt
Der Prozess python ist das Kind. Wenn er child received: environment ready ausgibt, hat er den Umgebungswert statt einer gewöhnlichen PowerShell-Variablen erhalten.
export COURSE_MARKER="environment ready"
printenv COURSE_MARKER
python environment-check.py
cat destination/environment-check.txt
Der Prozess python ist das Kind. Wenn er child received: environment ready ausgibt, hat er den exportierten Umgebungswert statt einer reinen Shell-Variablen erhalten.
export COURSE_MARKER="environment ready"
printenv COURSE_MARKER
python environment-check.py
cat destination/environment-check.txt
Der Prozess python ist das Kind. Wenn er child received: environment ready ausgibt, hat er den exportierten Umgebungswert statt einer reinen Shell-Variablen erhalten.
Lies den Nachweis, bevor du auf Check my work klickst. Die Zustandsprüfung überprüft das bereitgestellte Programm und genau die Datei, die es erzeugt hat. Sie kann nicht jeden Tastenanschlag eines früheren Shell-Prozesses rekonstruieren. Deshalb gehört deine eigene Beobachtung der Ausgabe des Kindprogramms zu den Belegen dieser Übung.
Du setzt einen Sitzungswert und startest danach ein Programm aus demselben Terminal. Was solltest du erwarten?
Du setzt einen Wert in einem Terminalfenster. Ein zweites, bereits geöffnetes Fenster sieht ihn nicht. Warum?
Du hast nachgewiesen, dass ein Wert eine Prozessgrenze überschritten hat, und gesehen, wo diese Grenze endet. Der Kontrollpunkt verbindet jetzt Orientierung, Untersuchung, sorgfältige Baumänderungen und einen einfachen Abschlussnachweis, ohne einen weiteren Befehl einzuführen.