Ieder proces heeft een omgeving waarmee het verbonden is. Een omgeving bestaat uit een verzameling omgevingsvariabelen. Een variabele is een veranderlijke waarde met een vaste naam. Als voorbeeld, zou de naam EMAIL naar de waarde joe@nowhere.com kunnen verwijzen. De waarde kan variëren --- EMAIL zou ook kunnen verwijzen naar jane@somewhere.com.
Aangezien je shell net als ieder ander proces een proces is, heeft het een omgeving. Je kunt de omgeving van je shell bekijken door het intikken van de opdracht printenv. Bij deze wat voorbeelduitvoer:
PAGER=less HOSTNAME=icon MAILCHECK=60 MOZILLA_HOME=/usr/local/lib/netscape PS1=$ USER=hp MACHTYPE=i486-pc-linux-gnu EDITOR=jed DISPLAY=:0.0 LOGNAME=hp EMAIL=hp@pobox.com SHELL=/bin/bash HOSTTYPE=i486 OSTYPE=linux-gnu HISTSIZE=150 HOME=/home/hp TERM=xterm-debian TEXEDIT=jed PATH=/home/hp/local/bin:/usr/sbin:/home/hp/.bin:/home/hp/local/bin:/usr/sbin:/usr/local/bin:/usr/bin:/bin:/usr/bin/X11:/usr/games:. _=/usr/bin/printenv |
Op je systeem zal de uitvoer anders zijn, maar wel vergelijkbaar.
Met omgevingsvariabelen heb je een manier om het systeem te configureren. De variabele EDITOR laat je bijvoorbeeld je voorkeurseditor voor het posten van nieuws, schrijven van email, enzovoort selecteren. De variabele HISTSIZE vertelt Bash hoeveel opdrachtregels in de historie bij te houden; je kunt dan met de pijltjestoets naar boven zoveel opdrachtregels terug.
Het instellen van omgevingsvariabelen is simpel. Zodra je hebt geleerd hoe, zal je ze waarschijnlijk automatisch in willen stellen, als je inlogt; zie Hoofdstuk 9 voor instructies.
Probeer als oefening je shell-prompt en je viewer voor je tekstbestand met omgevingsvariabelen in te stellen:
Bekijk het online handboek voor de opdracht less. Om je de tekst per scherm tegelijkertijd te laten bekijken, roept man een pager aan die je iedere keer dat je op de spatiebalk drukt, een nieuwe pagina met tekst toont. Standaard maakt het gebruik van een pager genaamd more.
Ga je gang en werp een vluchtige blik op de man page van less, een uitgebreide pager. Scroll naar een nieuwe pagina door de spatiebalk in te drukken; druk op q om te stoppen. more zal ook automatisch stoppen als je het einde van de man page bereikt.
Na het lezen over de voordelen van less, wil je het wellicht gebruiken om man pages te lezen. Stel hiervoor de omgevingsvariabele PAGER in.
De opdracht om een omgevingsvariabele onder bash in te stellen, heeft altijd dit formaat: export NAME=value. Mocht je ooit tcsh of een andere afgeleide van de C-Shell draaien, dan is de equivalente opdracht setenv NAME value.
export betekent het verplaatsen van de variabele van de shell naar de omgeving. Dit betekent dat ook andere programma's dan de shell ze kunnen benaderen.
Dit is de makkelijkste manier om de waarde van een variabele te bekijken. $PAGER vertelt de shell de waarde van de variabele PAGER in te voegen voordat de opdracht wordt aangeroepen. echo kaatst zijn argument terug: in dit geval, echoot het de huidige waarde van PAGER, namelijk less.
Lees de handleiding van more. Deze keer zou man de pager less moeten hebben aangeroepen.
less heeft veel mogelijkheden die in more ontbreken. Je kunt bijvoorbeeld met de b-toets terugscrollen. Je kunt je met de cursorpijlen ook naar beneden en boven verplaatsen (zelfs zijwaarts). less eindigt niet wanneer het 't einde van de man page bereikt; het wacht totdat je de q intikt.
Als je tijdelijk een andere instelling wilt, kun je een nieuwe waarde plaatsen die alleen effect heeft voor de huidige opdrachtregel. Plaats de NAME=value aan het begin van de opdrachtregel gevolgd door de uit te voeren opdracht. Laat export achterwege.
Je kunt wat less-specifieke opdrachten, zoals b uitproberen, om te verifiëren dat ze met more werken en je inderdaad gebruik maakt van more.
De waarde van PAGER zou nog steeds less moeten zijn; de instelling van hierboven was slechts tijdelijk.
Als je geen pager meer in wilt stellen, kun je de opdracht unset op de variabele toepassen. man zal dan standaard gebruik maken van more, net als dat 't deed voor je de variabele instelde.
Aangezien PAGER is verwijderd, zal echo niets afdrukken.
Wijzig gewoon voor de lol je shell-prompt. $ wordt hello:.
export is niet nodig, omdat we de werking van de shell zelf wijzigen. Er is geen reden de variabele naar de omgeving te exporteren zodat andere programma's het kunnen zien. Technisch gesproken is PS1 een shell variabele in plaats van een omgevingsvariabele.
Als je dat zou willen, zou je de shell-variabele kunnen exporteren waarbij je het naar een omgevingsvariabele transformeert. Vervolgens zouden andere programma's het dan kunnen zien: Met name de kinderen van het huidige shell-proces. De volgende sectie legt dit uit.