0%

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

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.

Eine Shell übergibt eine Kopie ihrer Umgebung an ein danach gestartetes Kind. Eine bereits geöffnete Shell erhält keine Aktualisierung, und das Kind kann die Kopie des Elternprozesses nicht ändern.

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.

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.