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
PowerShell heeft gewone variabelen voor zijn eigen werk en het voorvoegsel $env: voor waarden die kindprocessen moeten erven:
$localLabel = 'only this PowerShell'
Write-Output $localLabel
$env:COURSE_LABEL = 'visible to a child'
Write-Output $env:COURSE_LABEL
Beide waarden zijn zichtbaar in de huidige PowerShell-sessie. Alleen COURSE_LABEL is in de omgeving geplaatst die een gestart programma ontvangt.
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
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.

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.
$env:COURSE_MARKER = 'environment ready'
Write-Output $env:COURSE_MARKER
python ./environment-check.py
Get-Content -LiteralPath ./destination/environment-check.txt
Het proces python is het kindproces. Toont het child received: environment ready, dan heeft het de omgevingswaarde ontvangen en geen gewone PowerShell-variabele.
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.
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.