Unix-opas, luku 6 Komennot:

Ympäristömuuttujat

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:

  1. Jos komennossa on -P-valitsin, käytä siinä ilmoitettua kirjoitinta.
  2. Muussa tapauksessa käytä sitä kirjoitinta, jonka ympäristömuuttujan 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.)
Edellä esitetty on vain esimerkki siitä, miten shellin ja ohjelmien vuorovaikutus voi toimia.

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ää PATHin 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 PATHin 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.