Bourne Again Shell (bash)

Premenné prostredia

Linux-ový systém je komplikovaná potvora. Je treba na veľa vecí dávať pozor, na mnoho detailov, ktoré vstupujú do hry pri vašej práci s rôznymi programami (pričom o niektorých z nich ani nemusíte vedieť). Nikomu sa nechce zadávať množstvo parametrov každému programu, ktorý sa spustí, hovoriť mu, ktorý terminál má použiť, meno počítača, ako by mal vyzerať prompt ...

Takže užívatelia majú mechanizmus, ktorý sa s tým všetkým vysporiada a ktorý sa nazýva prostredie. Prostredie definuje podmienky, v ktorých sa programy spúšťajú a niektoré z týchto podmienok sú premenlivé; užívateľ môže prostredie ľubovoľne meniť a hrať sa s ním tak, ako sa to len dá v Linux-ovom systéme. Takmer každý shell má premenné prostredia (ak nie, tak to pravdepodobne nie je veľmi užitočný shell). Tu je prehľad príkazov, ktoré bash poskytuje na prácu so svojimi premennými prostredia.

   $ set

set sám o sebe vám ukáže všetky premenné prostredia, ktoré sú práve definované, rovanko ako aj ich hodnoty. Ako väčšina vstavaných príkazov bash-u, môže robiť tiež niekoľko iných vecí (s parametrami); ale to necháme na manuálovú stránku bash-u(1). Kúsok výstupu príkazu set na jednom z mojich počítačov vyzerá takto:

   PATH=/usr/local/lib/qt/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:
   /usr/openwin/bin:/usr/games:.:/usr/local/ssh2/bin:/usr/local/ssh1/bin:
   /usr/share/texmf/bin:/usr/local/sbin:/usr/sbin:/home/logan/bin
   PIPESTATUS=([0]="0")
   PPID=4978
   PS1='\h:\w\$ '
   PS2='> '
   PS4='+ '
   PWD=/home/logan
   QTDIR=/usr/local/lib/qt
   REMOTEHOST=ninja.tdn
   SHELL=/bin/bash

Všimnite si premennú PATH, o ktorej sme hovorili predtým; môžem spúšťať akýkoľvek program, v ktoromkoľvek z tých adresárov jednoducho naťukaním jeho holého mena.

   $ unset VARIABLE

unset odstráni všetky premenné, ktoré mu dáte, vymazaním ich mena aj hodnoty. bash zabudne, že taká premenná vôbec kedy existovala. (Nemajte obavy. Pokiaľ to nie je niečo explicitne definované v tej shell-ovej relácii, bude to nanovo definované v hociktorej ďalšej relácii.)

   $ export PREMENNA=nejaka_hodnota

Aj export je vskutku veľmi užitočný. Jeho použitím dáte premennej prostredia PREMENNA hodnotu “nejaka_hodnota”; ak PREMENNA neexistovala, tak už existuje. Ak PREMENNA už mala nejakú hodnotu, tak tá je teraz fuč. To nie je dobre, ak ste sa len pokúštali pridať adresár do vašej PATH. V takom prípade, pravdepodobne chcete niečo takéto:

   $ export PATH=$PATH:/some/new/directory

Všimnite si použitie $PATH. Tam, kde chcete, aby bash interpretoval premennú (nahradil ju jej hodnotou), šupnite $ na začiatok mena premennej. Napríklad, echo $PATH vráti hodnotu PATH. V mojom prípade:

   $ echo $PATH
   /usr/local/lib/qt/bin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:
   /usr/openwin/bin:/usr/games:.:/usr/local/ssh2/bin:/usr/local/ssh1/bin:
   /usr/share/texmf/bin:/usr/local/sbin:/usr/sbin:/home/logan/bin

Dopĺňanie mien

(Opäť niečo super.)

  1. Rozhranie príkazového riadku znamená veľa písania.

  2. Písanie je práca.

  3. Nikto nemá rád prácu.

Z 3 a 2, môžeme vyvodiť, že 4) nikto nemá rád písanie. Našťastie, bash nás zachráni od 5 ( nikto nemá rád rozhranie príkazového riadku).

Pýtate sa, ako bash dosiahne tento báječný výkon? V spolupráci s nahrádzaním znakov, o ktorom sme hovorili predtým, má bash “dopĺňanie mien”.

Dopĺňanie mien funguje asi takto: píšete meno súboru. Možno, že je vo vašej PATH, možno ho píšete explicitne. Potrebujete naťukať len toľko z jeho mena, aby to stačilo na jeho jednoznačnú identifikáciu. Potom stlačte klávesu Tab. bash si domyslí čo chcete a dokončí ťukanie za vás!

Čas na príklad. /usr/src obsahuje dva pod-adresáre: /usr/src/linux a /usr/src/sendmail. Ja chcem vidieť, čo je v /usr/src/linux. Takže len naťukám ls /usr/src/l, stlačím klávesu TAB a bash mi dá ls /usr/src/linux.

Teraz predpokladajme, že existujú dva adresáre: /usr/src/linux a /usr/src/linux-old; Ak naťukám /usr/src/l a stlačím TAB, bash doplní toľko, koľko sa dá a ja dostanem /usr/src/linux. Tu môžem skončiť, alebo môžem stlačiť TAB ešte raz a bash mi ukáž zoznam adresárov, ktoré začínajú tým, čo som naťukal doteraz.

Teda menej ťukania ( a teda ľuďom sa môže páčiť rozhranie príkazového riadku). Vravel som vám, že je to super.