Hlavní navigace

Bash

Michal Krause

... aneb Bourne-Again SHell je jeden z nejoblíbenějších shellů. Vyskytuje se snad ve všech distribucích a navíc je obvykle používán jako výchozí pro všechny uživatele. Pojďme se teď podívat, jak si ho přizpůsobit obrazu svému.

Nejdříve si řekněme, co se vlastně děje, když se Bash spouští, například po přihlášení do systému. Vzhledem k tomu, že shell může být spuštěn několika různými způsoby, existuje i několik odlišných úvodních sekvencí.
První z nich je určena pro tzv. login shell, což v praxi například odpovídá situaci po přihlášení do systému. V tomto případě se nejdříve vykoná soubor /etc/profile a poté z trojice souborů ~/.bash_profile, ~/.bash_login nebo ~/.profile první existující (hledáno v uvedeném pořadí). Při ukončení shellu (odhlášení) je vykonán soubor ~/.bash_logout, pokud tento existuje.
Druhou možnou situací je tzv. interaktivní nepřihlašovací shell (poněkud neumělý překlad anglického interactive nonlogin shell). Interaktivitou shellu je míněn stav, kdy je jeho standardní vstup i výstup připojen k terminálu, ale nejde o přihlašovací shell. Typická situace je například otevření nového okna xtermu. V takových případech je vykonán pouze soubor ~/.bashrc, pokud existuje.
Poslední možností je neinteraktivní shell, který nevykonává žádný z uvedených souborů.
Výše popsané chování může být poněkud odlišné v závislosti na parametrech, se kterými je Bash spouštěn. Rovněž se mění volání jednotlivých souborů, pokud je Bash spuštěn jako sh. V tom případě se Bash chová opravdu jako sh a vykoná pouze soubory /etc/profile a ~/.profile.
Všechny uvedené soubory mohou sloužit k nastavování proměnných prostředí, aliasů, provádění inicializačních akcí apod. Soubory nemají žádný speciální formát, jde o obyčejné shell skripty.

Jednou z nejzajímavějších funkcí Bashe je možnost definovat aliasy, což není nic jiného, než vytvoření dvojice aliaspovel. Zavoláním aliasu se pak vykoná povel, což může značně zpříjemnit práci. K tomu slouží obvykle soubor ~/.bashrc. Alias se definuje například takto:
alias pavuk=‚pavuk -X -gui_font -biznet-aplos-medium-r---------iso8859–2‘
Tento řádek mi zajistí, že se program pavuk spustí rovnou do interaktivního prostředí s přednastaveným českým fontem. Jistě uznáte, že to ušetří docela dost úhozů na klávesnici.
Aliasy mají přednost před programy v cestě (PATH), takže jsem si mohl dovolit použít alias pavuk, přestože spustitelný soubor stejného jména již v cestě existuje.

Kromě výše uvedených souborů existuje ještě jeden, neméně důležitý. Jde o soubor ~/.inputrc, který slouží ke konfiguraci vstupu a výstupu. S ním již lze provozovat tu pravou shellovou magii.
V ~/.inputrc můžete definovat několik základních proměnných, které určují chování shellu například zde lze povolit či zakázat vstup a výstup osmibitových znaků (důležité při lokalizaci), nastavit zda se mají dlouhé řádky zalamovat nebo scrollovat a podobně. Jako příklad uvedu správné nastavení pro vstup a výstup českých znaků:

set meta-flag on
set convert-meta off
set output-meta on
set input-meta on
"e[1~": beginning-of-line
"e[3~": backward-delete-char
"e[4~": end-of-line


Kromě těchto proměnných lze ale v souboru ~/.inputrc i mapovat funkce na různé klávesy. Buď můžete klávese přiřadit některou zabudovanou funkci nebo výpis libovolného řetězce. Opět několik příkladů:

# Mapuje na klávesu Ctrl+T dopředné prohledávání historie, opak Ctrl+R
"C-t": forward-search-history

# Nastaví mazání celé řádky na klávesu Ctrl+Meta+K
"CMk": kill-whole-line

# Zajistí, že po stisku klávesy Ctrl+F se na řádku vloží mustr pro povel find
"C-f": "find . -iname "


Kompletní seznam všech předdefinovaných funkcí i proměnných pro soubor ~/.inputrc naleznete v manuálové stránce Bashe v sekci READLINE.

Tak, to by bylo pro začátek asi vše. Někdy příště se podíváme na základy skriptování v Bashi.

Našli jste v článku chybu?