0%

De opdrachtregel · oefening

Waarden die in de sessie leven

Sommige waarden horen niet in een opdracht thuis: in welke modus een hulpmiddel moet werken, welke taal het moet gebruiken of waar het een tijdelijk resultaat moet schrijven.

Het besturingssysteem geeft elk proces een verzameling benoemde omgevingsvariabelen voor zulke waarden. Een programma erft een kopie van het proces dat het start. Die kopie in één richting is het centrale idee: het verklaart hoe een programma de waarde ontvangt, waarom een andere terminal die niet opeens ziet en waarom de waarde verdwijnt wanneer de sessie eindigt.

Een shellwaarde is niet automatisch een omgevingswaarde

Een toekenning maakt eerst een shellvariabele, die bij deze shell hoort:

LOCAL_LABEL="only this shell"
printenv LOCAL_LABEL

De shell kent de waarde, maar het afzonderlijke programma printenv ontvangt geen omgevingswaarde met die naam. export plaatst een waarde in de omgeving die aan later gestarte kindprocessen wordt doorgegeven:

export COURSE_LABEL="visible to a child"
printenv COURSE_LABEL

De kopie gaat één kant op, alleen naar beneden. Een kindproces ontvangt bij het starten de omgeving van het ouderproces. Niets wat het kindproces verandert kan terugwerken op het ouderproces. Een terminalvenster dat al openstaat krijgt ook geen update uit een ander venster. In het schema is PARENT SHELL de ouder-shell en CHILD PROGRAM het kindprogramma. De omgeving wordt eenmaal gekopieerd bij het starten (ENVIRONMENT COPIED ONCE); beide hebben daarna hun eigen kopie (OWN COPY). Er is geen terugwerking (NO REACHING BACK) en geen zijwaartse update (NO SIDEWAYS UPDATE). De al geopende andere shell (OTHER SHELL — ALREADY OPEN) blijft zoals die was.

Een shell geeft een kopie van zijn omgeving aan een kindproces dat daarna wordt gestart. Een al geopende shell krijgt geen update en het kindproces kan de kopie van het ouderproces niet veranderen.

Niets hiervan herschrijft een opstartbestand of een permanente systeeminstelling. Sluit de sessie en een nieuwe begint zonder de waarden die je hebt toegevoegd. Blijvende configuratie valt bewust buiten deze cursus: een wijziging voor elke toekomstige sessie verdient eigen herstelinstructies.

Oefening: laat een kindprogramma vastleggen wat het ontving

De werkruimte bevat een meegeleverd programma met de naam environment-check.py. Je leert hier niet de Python-syntaxis ervan; het is een meetinstrument. Wanneer een kindproces COURSE_MARKER ontvangt, schrijft het programma de waargenomen waarde naar destination/environment-check.txt.

Gebruik eerst Reset en blijf daarna in één terminalsessie in /workspace.

export COURSE_MARKER="environment ready"
printenv COURSE_MARKER
python environment-check.py
cat destination/environment-check.txt

Het proces python is het kindproces. Toont het child received: environment ready, dan heeft het de geëxporteerde omgevingswaarde ontvangen en geen variabele die alleen bij de shell hoort.

Lees het bewijsbestand voordat je op Check my work drukt. De controle van de eindtoestand kijkt naar het meegeleverde programma en het exacte bestand dat het heeft gemaakt. Die kan niet elke eerdere toetsaanslag in een shellproces reconstrueren. Daarom is je eigen waarneming van de uitvoer van het kindprogramma onderdeel van het bewijs in deze oefening.

Je stelt een sessiewaarde in en start daarna vanuit dezelfde terminal een programma. Wat mag je verwachten?

Je stelt in één terminalvenster een waarde in. Een tweede venster, dat al openstond, ziet die niet. Waarom?

Je hebt aangetoond dat één waarde een procesgrens passeerde en gezien waar die grens ophoudt. De afsluitende oefening combineert nu oriënteren, inspecteren, zorgvuldige structuurwijzigingen en één eenvoudig voltooiingsbewijs, zonder een nieuwe opdracht te introduceren.