Linux je složitá bestie a je tu toho hodně, co ji drží v mezích. Hodně drobných detailů, které přicházejí do hry při vaší normální interakci s různými programy (některých z nich si dosud nemusíte být vědomi). Nikdo nechce zadávat množství voleb každému programu, který se chystá spustit. Říkat mu, jaký druh terminálu se používá, hostitelské jméno počítače, jak by měl vypadat prompt...
Tak jako (So as coping) mechanismus, uživatelé mají cosi, co se nazývá prostředí. Prostředí definuje podmínky v nichž program běží a některé z těchto podmínek jsou proměnlivé. Uživatel je může měnit a hrát si s nimi, jak je to možné jedině v linuxovém systému. Téměř jakýkoliv shell bude mít proměnné prostředí (jestli ne, tak to asi není moc použitelný shell). Zde podáme přehled příkazů, které bash poskytuje pro manipulaci s jeho proměnnými prostředí.
$ set |
set samotný vám ukáže všechny proměnné prostředí, které jsou v současné chvíli definovány, a rověž i jejich hodnoty. Tak jako většina vestavěných věcí v bashi, může dělat i pár dalších věcí (s parametry). Přenechme manuálovým stránkám bash(1), aby to vysvětlily pořádně. Dílčí ukázka výpisu z příkazu set na mém počítači vypadá 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 |
Povšiměte si proměnné PATH, kterou jsme probírali dříve. Mohu spouštět cokoliv, co je v těchto adresářích pouhým zadáním jména souboru.
$ unset VARIABLE |
unset odstraní všechny proměnné, které mu zadáte. Vymaže jak proměnné, tak i jejich hodnoty; bash zapomene, že vůbec kdy existovaly. (Don't worry. Unless it's something you explicitly defined in that shell session, it'll probably get redefined in any other session.)
$ export VARIABLE=some_value |
Nyní, export je vskutku užitečný. Jeho použitím zadáte proměnné prostředí VARIABLE hodnotu "some_value". Pokud VARIABLE dosud neexistovala, od nynějška bude. Pokud VARIABLE už měla nějakou hodnotu, je přepsána. To není zrovna nejlepší, pokud se jen snažíte přidat další adresář do vaší PATH. V takovém případě asi budete chtít udělat tohle:
$ export PATH=$PATH:/some/new/directory |
Povšimněte si použití $PATH: Když chcete, aby bash interpertoval proměnnou (tedy, aby jí nahradil její hodnotou), přidejte před jméno proměnné znak $. Například echo $PATH vypíše hodnotu proměnné PATH. V mém případě:
$ 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 |
(Zde opět přichází něco moc bezva.)
Prostředí příkazové řádky znamená mnoho psaní.
Psaní je práce.
Nikdo nemá rád práci.
Z bodů 3 a 2 můžeme odvodit, že 4. nikdo nemá rád psaní. bash nás naštestí uchrání před 5: Nikdo nemá rád prostředí příkazové řádky.
Ptáte se, jak bash může dokázat tento obdivuhodný čin? Kromě nahrazování žolíků popsaného dříve, bash ovládá kompletaci pomocí tabulátoru.
Dokončování tabulátorem pracuje takto: Píšete jméno souboru. Možná, že je ve vaší PATH, možná je vypisujete úplně. Jedniné, co teď musíte udělat je napsat dost znaků jména onoho souboru, aby byl jednoznačné identifikovatelný. Potom stiskněnte klávesu Tab. bash pochopí co chcete a dokončí psaní za vás!
Čas na příklad: Adresář /usr/src obsahuje dva podadresáře: /usr/src/linux a /usr/src/sendmail. Chci se podívat, co je v adresáři /usr/src/linux. Tak napíšu jenom ls /usr/src/l, stisknu klávesu TAB a bash mi dá ls /usr/src/linux.
Dále předpokládejme, že tu jsou dva adresáře /usr/src/linux a /usr/src/linux-old. Když napíšu /usr/src/l a stisknu TAB, bash vyplní tolik, kolik může a já dostanu /usr/src/linux. Tady se můžu zastavit, nebo můžu stisknout TAB ještě jednou a bash ukáže seznam adresářů, které vyhovují tomu, co jsem už napsal.
Proto méně psaní (a proto mohou mít lidé rádi prostředí příkazové řádky). Říkal jsem vám, že to je bezva.