7Kapitola

Bash 7: Pojmenované roury a aliasy

Bohdan Milar vítá pravidelné čtenáře u již sedmého pokračování seriálu o zřejmě nejrozšířenějším textovém příkazovém interpretru, o Bashi.

Minule jsme si pověděli o přesměrování výstupu a rourách. Dnes toto téma uzavřeme tím, že si představíme pojmenované roury. Potom si řekneme, co jsou to aliasy.

Čím dál častěji slýchám, že bychom se v tomto seriálu měli posunout ke skriptování, tedy k programování pomocí Bashe. To je samozřejmě cílem celého mého snažení. Nejprve ale bylo potřeba vysvětlit si některé základní principy práce s Bashem a procvičit si je.

Pojmenované roury

Roury, o kterých jsme mluvili v minulých odstavcích, jsou jako nestabilní červí díry. Jeden průlet a díra zmizí. Co ale kdybychom chtěli nějakou rouru využívat opakovaně? Linux nám k tomu nabízí mechanismus zvaný pojmenovaná roura (named pipe).

Pojmenovaná roura je speciálním typem souboru existujícího v souborovém systému. K jejímu vytvoření slouží program mkfifo. Syntaxe je jednoduchá. Stačí zadat jen její jméno, např. mkfifo roura. Že nejde o běžný soubor, si můžeme ověřit příkazem ls -l roura. Na začátku bloku s přístupovými právy vidíme "p" - pipe.

Nyní můžeme do roury něco poslat, třeba přesný čas: date > roura. Nelekejte se, pokud se neobjevil prompt. To je v pořádku. Proces čeká na vyprázdnění roury. Spusťme tedy jinou konzoli nebo terminál, přejděme do adresáře, kde leží naše pojmenovaná roura a zadejme třeba cat roura. Ve druhém Bashi budou vypsány příslušné údaje a v prvním se objeví prompt.

Funguje to i obráceně. Můžeme nechat nějaký proces číst z prázdné roury (cat roura). Ten bude čekat až do doby, kdy se roura zaplní. To provedeme třeba informacemi o našem systému (uname -a > roura) na jiném terminálu. Až nyní cat svou práci dokončí. Tohoto chování lze využít v mnoha situacích. Dostaneme se k nim, až budeme tvořit skripty.

Aliasy

Možná jste se již setkali s příkazem ll. Bash jej vykonává na většině systémů (mimo třeba Debianu a Slackwaru). Tento příkaz však nereprezentuje žádný spustitelný soubor na disku ani interní příkaz Bashe. Kde se tedy bere? Je to alias. Ve skutečnosti jde o zkratku zápisu ls -l. Říkáte si, že je v těch příkazech pěkný ... ?

Nelekejte se, není to zas takový nepořádek. Pro všechny proveditelné příkazy funguje doplňování pomocí [tab]. Spustitelné soubory najdeme v adresářích zapsaných do proměnné PATH (echo $PATH). Interní funkce Bashe v manuálové stránce (man bash). No a seznam aliasů vyvoláte příkazem alias (interní příkaz Bashe).

Příkaz zapsaný bez parametrů vyvolá seznam přidělených přezdívek. V seznamu představuje každý řádek definici jednoho aliasu. Vlevo od rovnítka stojí přezdívka. Vpravo, většinou v apostrofech, příkaz nebo skupina příkazů, které se provedou po zadání přezdívky jakožto příkazu pro Bash. Výpis mých aliasů je v rámečku.

alias l.='ls -d .* --color=tty'
alias ll='ls -l --color=tty'
alias ls='ls --color=tty'
alias vi='vim'

Tak vidíme, že ll není jen zkratka ls -l, ale přidána je ještě podpora barev pomocí --color=tty. Nebo zde zjišťujeme, že zadáním vi ve skutečnosti spouštíme program vim. Zajímavý je příkaz l., který vypíše všechny soubory se jménem začínajícím tečkou.

Ve třetím řádku je příklad toho, že alias může přepsat stejnojmenný příkaz. Pokud nám třeba vadí, že cp se pořád dokola ptá, zda může přepsat existující cílový soubor, můžeme nadefinovat alias cp='cp -f'. Pozor ovšem na nebezpečnost tohoto mechanismu. Dal by se dost dobře zneužít pro trojské koně.

Aliasy se definují přesně tak, jak je vypisuje příkaz alias. Stačí napsat alias, mezeru, přezdívku, rovnítko a syntaxi příkazu do apostrofů, např. alias ahoj='echo nazdar'. Od nynějška, když zadáte Bashi ahoj, odpoví "nazdar". Zadáme-li nový alias se stejným jménem, přepíše obsah toho původního. Alias zrušíme příkazem unalias a zadáním přezdívky, např. unalias ahoj.

Závěr

Takže to je pro dnešek a z celé teorie vše. Od příště začneme skriptovat.