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.

Doba čtení: 3 minuty

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?