UnixovΘ p°φkazovΘ interpretery spolupracujφ s prom∞nn²mi, kterΘ pou₧φvajφ bu∩to jednotlivΘ p°φkazovΘ interpretery, nebo odpovφdajφcφ programy Φi instrukce. V²hod prom∞nn²ch, kterΘ jsou pro interpretery definovßny, vyu₧φvß i samotn² interpreter (shell).
Jestli₧e se p°ihlßsφte do systΘmu typu Unix (tj. i Linux), potom soubor /etc/passwd obsahuje nßzev p°φkazovΘho interpreteru, kter² je u₧ivateli implicitn∞ p°i°azen. Tento nßzev je ulo₧en jako poslednφ pole °ßdku u₧ivatele v tomto souboru. Aktußlnφ nastavenφ m∙₧ete zkontrolovat v²pisem cat /etc/passwd a p°esm∞rovßnφm zφskanΘho v²stupu do programu grep, kter² umo₧nφ vyhledat u₧ivatelsk² identifikßtor, tzv. userid. V nßsledujφcφm p°φkladu je jako userid pou₧ito slovo prochßzka.
$ cat /etc/passwd | grep -w prochazka
Zφskßte nap°φklad v²stup, kter² je obdobou nßsledujφcφho:
prochazka:x:500:500:Prochazka Na Moste:/home/prochazka:/bin/ksh
Vidφme, ₧e u₧ivateli je p°i°azen p°φkazov² interpreter Korn shell neboli ksh. Tento p°φkazov² interpreter Φte a umφ inicializovat a spustit jak²koliv soubor s nßzvem /etc/profile, kter² systΘmov² administrßtor naprogramoval pro inicializaci zßkladnφch nastavovacφch akcφ, je₧ jsou pot°ebnΘ v pr∙b∞hu p°ihlaÜovßnφ pro ka₧dΘho jednotlivΘho u₧ivatele. Jestli₧e tedy spustφte /etc/profile, spustφte vlastn∞ $HOME/.profile, kter² je nastaven tak, aby obsahoval prost°edφ u₧ivatele. Soubory /etc/profile i $HOME/.profile definujφ prom∞nnΘ prost°edφ. P°φkazov² interpreter typu Bourne pracuje podobn²m zp∙sobem.
P°φkazov² interpreter C se chovß analogicky, s tφm rozdφlem, ₧e pou₧φvß vφce soubor∙. Zpracovßvß /etc/csh.cshrc, potom /etc/csh.login a nakonec kolekci soubor∙, kterΘ jsou ulo₧eny v domovskΘm adresß°i u₧ivatele, ~/.cshrc, ~/.history, ~/.login a ~/.cshdirs.
Bez ohledu na zp∙sob inicializace je v²sledkem definovanΘ u₧ivatelskΘ prost°edφ, tj. vΦetn∞ prom∞nn²ch prost°edφ. Stav prost°edφ (tzv. environment) m∙₧ete vizußln∞ zkontrolovat zadßnφm instrukce printenv nebo env. Nßsledujφcφ zkrßcen² p°φklad je mo₧n²m obrazem v²stupu programu printenv:
$ printenv
USERNAME=
HISTSIZE=1000
HOSTNAME=my.system.com
LOGNAME=prochazka
MAIL=/var/spool/mail/prochazka
TERM=xterm
PATH=....
HOME=/home/prochazka
SHELL=/bin/ksh
PS1=[\u@\h \W]\$
.
.
.
LC_ALL=en_US
Poznßmka: P°φkazov² interpreter pou₧φvß takΘ prom∞nnΘ, kterΘ nejsou p°φmou souΦßstφ prost°edφ. Rozdφly mezi prom∞nn²mi p°φkazovΘho interpreteru a prom∞nn²mi prost°edφ byly uvedeny v prvnφ Φßsti Φlßnku.
Prom∞nnß PS1, kterß je uvedena v p°edchßzejφcφm p°φkladu prost°edφ, tj. jako prom∞nnß prost°edφ, je vlastn∞ prvnφ v²zva p°φkazovΘho °ßdku (prompt). UrΦuje tedy, co bude zobrazovßno na standardnφ v²stupnφ konzole u₧ivatele v okam₧iku, kdy p°φkazov² interpreter oΦekßvß zadßnφ novΘ instrukce. Analogickß prom∞nnß p°φkazovΘho interpreteru, tzv. druhß v²zva PS2, obsahuje parametry, kterΘ jsou pou₧ity, kdy₧ je instrukce zadßvßna a nenφ dokonΦena, tedy jeÜt∞ p°ed koneΦn²m zadßnφm pßrovΘho odd∞lovaΦe a stiskem klßvesy Enter, kter² p°edß instrukci ke zpracovßnφ. Funkci obou v²zev p°φkazovΘho °ßdku zkontrolujete pomocφ nßvodu, kter² je uveden dßle. Prvnφ °ßdek zobrazuje kontrolnφ v²stup $PS2, kdy se na monitoru po zadßnφ instrukce echo $PS2 objevφ znak ">". Zadßvßnφ novΘ instrukce zaΦφnß otevφracφ zßvorkou. Jestli₧e u₧ivatel v tomto okam₧iku stiskne klßvesu Enter, p°φkazov² interpreter oΦekßvß pokraΦovßnφ instrukce nebo zadßnφ uzavφracφ zßvorky. O tomto stavu informuje u₧ivatele znakem ">". Instrukce je zadßna, je stisknuta klßvesa Enter, ale proto₧e interpreter oΦekßvß znak ")", op∞t zobrazφ prompt ">". KoneΦn∞ kdy₧ u₧ivatel zadß ")", tj. druh² pßrov² odd∞lovaΦ, a stiskne Enter, instrukce bude ukonΦena a p°edßna ke zpracovßnφ.
$echo $PS2
>
$ (
> cat /etc/passwd | grep prochazka
> )
$
U₧ivatel si m∙₧e p°izp∙sobit grafickou podobu tΘto funkce ·pravou hodnoty a zm∞nou stavu prom∞nnΘ $PS2. V nßsledujφcφm p°φkladu je zm∞n∞na hodnota v²zvy p°φkazovΘho °ßdku $PS2 a zadßvanΘ instrukce stejnΘ jako v p°edchßzejφcφ ukßzce. Nakonec je stav $PS2 vrßcen na p∙vodnφ hodnotu definovanou prost°edφm.
$ echo $PS2
>
$ PS2="pokraΦujte v zadavani > "
$ (
pokraΦujte v zadavani > cat /etc/passwd | grep prochazka
pokraΦujte v zadavani > )
$ PS2="> "
#echo $PS2
>
$
Nabφzφ se otßzka, proΦ v²zva °ßdku urΦenß PS2 obsahuje hodnotu a p°itom nenφ uvedena mezi prom∞nn²mi prost°edφ? Pozorn∞ zkontrolujte obsah v²stupu instrukce printenv - a skuteΦn∞, pro PS2 nespat°φte ₧ßdnou definovanou prom∞nnou.
P°φkazov² interpreter definuje obvykle sßm o sob∞ n∞kolik implicitnφch prom∞nn²ch, PS2 je jednou z nich. Ostatnφ u₧iteΦnΘ prom∞nnΘ interpreteru, kterΘ jsou nastaveny a pou₧φvßny v interpreteru typu Korn, jsou nßsledujφcφ:
_ (podtr₧φtko) - Jestli₧e p°φkazov² interpreter provßdφ externφ instrukci, je tato prom∞nnß nastavena v prost°edφ novΘho procesu do cesty (path) provßd∞nΘ instrukce. V interaktivnφm re₧imu je tento parametr takΘ nastaven v rodiΦovskΘm p°φkazovΘm interpreteru jako poslednφ slovo p°edchßzejφcφ instrukce.
COLUMNS - PoΦet sloupc∙ terminßlu nebo okna.
ENV - Jestli₧e je tento parametr definovßn, bude nastaven po zpracovßnφ libovolnΘho souboru u₧ivatelskΘho profilu, expandovanß hodnota je pou₧ita jako startovacφ soubor interpreteru. Obvykle obsahuje funkci a alias definici.
ERRNO - CeloΦφselnß hodnota prom∞nnΘ p°φkazovΘho interpreteru errno, kterß identifikuje p°φΦinu poslednφ poruchy systΘmu.
HISTFILE - Nßzev souboru, kter² systΘm pou₧φvß pro uklßdßnφ historie. Kdy₧ je tento soubor definovßn, je historie naΦφtßna z tohoto specißlnφho souboru. V p°φpad∞ vφcenßsobn²ch aktivacφ p°φkazov²ch interpreter∙, kterΘ pracujφ na stejnΘm stroji, dojde ke sdφlenφ historie, jestli₧e jejich parametry HISTFILE ukazujφ na stejn² soubor. Jestli₧e prom∞nnß HISTFILE nenφ urΦena, je historie implicitn∞ uklßdßna do souboru $HOME/.sh_history.
HISTSIZE - PoΦet instrukcφ, kterΘ jsou normßln∞ ulo₧eny v souboru historie. Implicitnφ hodnota je 128.
IFS - Vnit°nφ pole odd∞lovaΦe polφ (internal field separator), kterΘ je pou₧φvßno v pr∙b∞hu substituce a instrukcφ Φtenφ pro odd∞lenφ hodnot do jasn∞ formulovan²ch a definovan²ch argument∙, obvykle je tato konstanta nastavena na hodnotu "mezera", "tabulßtor" a "nov² °ßdek".
LINENO - PoΦet °ßdek funkce nebo skriptu p°φkazovΘho interpreteru, kter² byl spuÜt∞n. Tato prom∞nnß je u₧iteΦnß pro lad∞nφ skript∙ p°φkazovΘho interpreteru. JednoduÜe v pot°ebn²ch bodech skriptu vlo₧φte instrukci echo $LINENO a nßsledn∞ byste m∞li b²t schopni urΦit vaÜi aktußlnφ pozici ve skriptu.
LINES - UrΦuje poΦet °ßdek na terminßlu nebo okn∞.
PPID - UrΦuje ID procesu rodiΦe p°φkazovΘho interpreteru. Tato hodnota je p°φstupnß pouze pro Φtenφ (read-only).
PATH - St°ednφkem odd∞len² seznam adresß°∙, kterΘ jsou prohledßvßny p°i vyhledßvßnφ instrukcφ.
PS2 - Druhß v²zva p°φkazovΘho °ßdku. Implicitnφ hodnotou je ">". Je pou₧φvßna, jestli₧e je pro dokonΦenφ zadßvßnφ instrukce pot°eba vφce vstupnφch °ßdk∙.
PWD - Aktußlnφ pracovnφ adresß°. Nemusφ b²t pou₧it nebo jeho hodnota m∙₧e b²t null (jestli₧e p°φkazov² interpreter nevφ, kde se prßv∞ nachßzφ).
RANDOM - Jednoduch² generßtor nßhodn²ch Φφsel. Kdykoliv je RANDOM pou₧it, urΦφ dalÜφ Φφslo z °ady nßhodn²ch Φφsel. Bod v °ad∞ Φφsel m∙₧e b²t nastaven p°i°azenφm Φφsla prom∞nnΘ RANDOM.
SECONDS - PoΦet sekund od okam₧iku spuÜt∞nφ p°φkazovΘho interpreteru nebo (pokud byla urΦena hodnota parametru v podob∞ celΘho Φφsla) poΦet sekund od okam₧iku nastavenφ plus hodnota, kterß byla nastavena.
TMOUT - Je-li v p°φpad∞ interaktivnφho p°φkazovΘho interpreteru prom∞nnß nastavena na hodnotu kladnΘho celΘho Φφsla, potom definuje maximßlnφ poΦet sekund, po kter² bude p°φkazov² interpreter Φekat na vstup po vytiÜt∞nφ prvnφho °et∞zce p°φkazovΘho °ßdku ($PS1). Je-li tato doba p°ekroΦena, potom je p°φkazov² interpreter spuÜt∞n.
TMPDIR - Definuje adresß°, v n∞m₧ jsou ulo₧eny doΦasnΘ soubory p°φkazovΘho interpreteru. Nenφ-li tento parametr nastaven nebo neobsahuje-li absolutnφ cestu do adresß°e, jsou doΦasnΘ soubory generovßny v adresß°i /tmp.
P°φkazov² interpreter typu C pou₧φvß prom∞nnΘ, kterΘ jsou analogickΘ nebo jsou obdobou uvedenΘho seznamu, ale s tφm rozdφlem, ₧e jsou definovßny nßzvy s mal²mi pφsmeny, nap°φklad prompt1, prompt2, path, home apod.
DalÜφ zajφmavΘ prom∞nnΘ jsou lokßlnφ prom∞nnΘ. Tyto prom∞nnΘ jsou LC_ALL, LC_CTYPE, LC_COLLATE a LC_MESSAGES. LC_ALL p°ekr²vß hodnoty t°φ ostatnφch prom∞nn²ch. Platφ, ₧e pokud LC_ALL nenφ definovßna, lze nastavenφ ostatnφch prom∞nn²ch definovat nezßvisle.
LC_MESSAGES - UrΦuje jazyk, kter² mß b²t pou₧it ve zprßvßch.
Prom∞nnß LC_ALL m∙₧e b²t pou₧ita pro zm∞nu ·°ednφho jazyka systΘmu. Zkuste nßsledujφcφ sekvence instrukcφ, abyste mohli pozorovat chovßnφ t∞chto akcφ. Jazyk je nastaven na francouzÜtinu (fr) a instrukce grep je inicializovßna s nepovolen²m parametrem -x. Chybovß zprßva bude vypsßna ve francouzÜtin∞. Potom je LC_ALL nastavena do Üpan∞lÜtiny (es) a chybovß zprßva je generovßna ve Üpan∞lÜtin∞. Nakonec je LC_ALL nepou₧ita a chybovΘ zprßvy jsou prezentovßny anglicky.
$ export LC_ALL=fr
$ grep -x
Usage: grep [OPTION] ... PATRON [FICHIER]...
Pour en savoir davantage, faites: 'grep -help'
$ LC_ALL=es
Modo de empoleo: grep [OPTION] ... PATRON [FICHERO]...
Pruebe 'grep-help' para mas informacion
$unset LC_ALL
$ grep -x
Usage: grep [OPTION] ... PATTERN [FILE]
Try 'grep -help' for more information
$
To je pro tentokrßt vÜe - v p°φÜtφ, zßv∞reΦnΘ Φßsti Φlßnku se budeme zab²vat jednoduch²mi skripty.