Ympäristömuuttujat (environment variables) ovat shellissä määriteltyjä muuttujia, jotka ovat myös shellin aliprosessien eli shellistä käynnistettyjen ohjelmien käytettävissä. Otetaan aluksi aiheesta yksinkertainen esimerkki:
Jossakin järjestelmässä saattaisi olla vaikkapa
enscript
-niminen komento
paperitulostusta
varten ja siinä
-P
-valitsin, jolla voi määrätä, mille kirjoittimelle
tulostus menee. Tällöin voisi olla käytännöllistä
asettaa
kirjoittimelle istuntokohtainen oletusarvo.
Jos
Tämä voidaan tehdä
määrittelemällä ympäristömuuttuja PRINTER
seuraavasti:
setenv PRINTER psy199
Tämän jälkeen sellainen enscript
-komento, jossa
ei ole -P
-valitsinta, toimii ikäänkuin siinä olisi
valitsin -Ppsy199
. Tämä johtuu siitä, että
enscript
valitsee kirjoittimen seuraavien sääntöjen mukaan:
-P
-valitsin, käytä siinä
ilmoitettua kirjoitinta.
PRINTER
arvo ilmoittaa.
(Jos käyttäjä ei ole sitä muuttujaa määritellyt,
enscript
käyttää muuttujan järjestelmäkohtaista
oletusarvoa, jos sellainen on, ja antaa virheilmoituksen
muussa tapauksessa.)
Riippuu komennosta tai ohjelmasta, käyttääkö se joidenkin ympäristömuuttujien arvoja jollakin tavalla ja miten se niitä käyttää. Periaatteessa asian pitäisi selvitä ainakin komennon tai ohjelman man-sivulta.
Järjestelmässä voi olla paljonkin valmiiksi määriteltyjä ympäristömuuttujia. Niiden tarkoituksena on osittain se, että jotkin ohjelmat toimisivat oletusarvoisesti jollakin järkeväksi harkitulla tavalla. Käyttäjä voi muuttaa oletusarvoja siten, että hän muuttaa ympäristömuuttujien arvoja.
Järjestelmässä ei ole mitään kiinteätä joukkoa ympäristömuuttujia.
Voit periaatteessa
määritellä minkä ympäristömuuttujan haluat ja antaa sille
minkä arvon haluat. Jos mikään prosessi ei käytä kyseisen
ympäristömuuttujan arvoa, ei määrittelyllä ole mitään käytännön
merkitystä. Toisaalta jos itse teet ohjelman, voit ainakin joissakin
tapauksissa tehdä siitä sellaisen, että se käyttää hyväkseen
ympäristömuuttujien arvoja, t.s. ohjelman toimintaan voidaan
vaikuttaa määrittelemällä jokin ympäristömuuttuja ennen ohjelman
käynnistämistä. Esimerkiksi C-ohjelmointikielessä tähän tarkoitukseen
voidaan käyttää standardifunktiota getenv
.
Voimassa olevat ympäristömuuttujien arvot saa selville
komennolla setenv
ilman argumentteja. Tulostus voi olla
aika pitkä. Seuraavassa näkyy vain tulostuksen alkuosa
eräässä tapauksessa:
epsilon ~ 51 % setenv ARCH=alpha DECW_BOOK=/p/doc/dxbook DISPLAY=yucca.hut.fi:0.0 EDITOR=emacs GROUP=staff HOME=/u/lai/lk/jkorpela HOST=epsilon.hut.fi HOSTTYPE=alpha ...Kaikkien ympäristömuuttujien merkitystä ei suinkaan tarvitse tietää - vain niiden, joiden arvojen asettaminen tai muuttaminen on jotenkin hyödyksi esim. jonkin ohjelman käytölle. Ja tällöin yleensä ohjelman käyttöohjeissa kerrotaan, millä ympäristömuuttujilla on merkitystä. Esimerkissämme näkyvistä muuttujista mainittakoon
EDITOR
,
jota jotkin ohjelmat käyttävät hyväkseen silloin, kun käyttäjä
antaa ohjelman sisällä käskyn, joka käynnistää editorin;
tällöin EDITOR
-muuttujan arvo saattaa määrätä,
mikä editori käynnistyy.
Ympäristömuuttujan arvon asettamisesta (tai muuttamisesta) oli jo esimerkki edellä. Komennon yleinen muoto on
setenv
muuttuja arvo
missä osan arvo rakenne riippuu siitä, mikä muuttuja on kyseessä. Usein arvo on rakenteeltaan hakemiston nimi, mutta se voi olla muutakin.
Varsin tärkeä ympäristömuuttuja on
PATH
.
Sen arvo on merkkijono, joka koostuu kaksoispisteellä toisistaan
erotetuista hakemistonnimistä. Shelli käyttää PATH
in
arvoa ohjelmien hakupolkuna:
jos käyttäjän kirjoittaman komennon
ensimmäinen sana ei ole shellin itsensä komento, niin shelli etsii
sennimistä niistä hakemistoista, jotka PATH
in arvossa
on lueteltu, ja nimenomaan siinä järjestyksessä, jossa ne on lueteltu.
Hakupolkuun voidaan lisätä hakemisto seuraavaan tapaan:
setenv PATH $PATH\:
hakemisto
(Tässä $PATH
viittaa PATH
-muuttujan vanhaan
arvoon, ja merkki \ "lainaa" sitä seuraavan merkin eli \: tarkoittaa
merkkiä :. Ilman "lainaamista" kaksoispisteellä olisi shellille
erikoismerkitys.)
On melko tavallista, että
järjestelmän perusasetusten mukaan
ohjelmien hakupolussa on mukana .
eli
kunkinhetkinen työhakemisto.
Tällöin esimerkiksi käyttäjän oma ohjelma
voidaan käynnistää suoraan nimellään, esim. a.out
pidemmän
vaihtoehdon ./a.out
asemesta.
Sellaiseen käytäntöön totutteleminen voi kuitenkin olla vaarallista.
Klassillinen esimerkki tästä on tilanne, jossa käyttäjä on antanut
omalle ohjelmalleen nimen test
. Vaikka työhakemisto olisi
mukana hakupolussa,
niin ohjelmaa ei välttämättä suinkaan voisi käynnistää komennolla
test
(vaan komennolla ./test
), sillä
on olemassa myös systeemiohjelma test
ja se hakemisto,
jossa se on, on todennäköisesti hakupolussa aiemmin!
Komennon setenv
vaikutus loppuu, kun pääteistunto
loppuu. Jos siis haluat pysyvästi asettaa joillekin ympäristömuuttujille
(alku)arvot, kirjoita setenv
-komennot
alustustiedostoon .cshrc.
Komento setenv
on nimenomaan T-shellin komento.
Muissa shelleissä on muita välineitä ympäristömuuttujien käsittelyyn.