Hlavní navigace

Příkazový řádek - přítel nejvěrnější (2)

12. 4. 2001
Doba čtení: 5 minut

Sdílet

V dnešním dokončení exkurze do světa pokročilejších funkcí moderních příkazových interpretů se podíváme na možnosti automatického opravování překlepů, zakouzlíme si s adresáři a řekneme si také něco málo o nastavování promptu.

Opravy překlepů

Tentokrát se dostáváme do končin, které najdete pouze u interpretu tcsh. bash (alespoň pokud je mi známo) opravovat překlepy na příkzovém řádku neumí. (V bashi verze 2 lze nastavit opravování překlepů ve jménech adresářů pro příkaz cd povelem shopt -s cdspell, ale to je asi tak vše – poznámka redakce).

Aktivace této vlastnosti je velmi jednoduchá. Stačí příkaz

set correct=all

tcsh pak kontroluje jak jména příkazů, tak jména souborů na příkazovém řádku. Upřímně řečeno jména souborů člověk zpravidla píše s pomocí doplňování, takže tam je kontrola často zbytečná. Pokud o ni nemáte zájem, můžete nastavit

set correct=cmd

a interpret bude kontrolovat jen příkazy.

Když uděláte chybu, reaguje na ni interpret návrhem opravené verze a dotazem, co s tím dál:

> vin commandlin.html

CORRECT>vi commandline.html  (y|n|e|a)?

Jak vidíte, opravil jak překlep ve jméně příkazu (špatně, chtěl jsem „vim“), tak chybějící písmeno v názvu souboru. Na výzvu lze reagovat jednou z následujících kláves:

Tabulka č. 114
y (yes) souhlas s navrženou změnou, provede se opravený příkaz
n (no) trvám na původním znění, provede se původní příkaz
e (edit) nic neprovádět, chci se vrátit k editaci příkazového řádku
a (abort) celé to byl omyl, zrušit příkaz

Kouzla s adresáři

Celkem často se přihodí, že během své práce poskakujete tam a zpátky mezi dvěma adresáři. Proto si bashtcsh při provedení příkazu cd zapamatují adresář, který jste právě opustili. Pokud později zadáte cd -, vrátíte se právě do tohoto adresáře (a zapamatuje se ten, který opouštíte). Ke zmíněnému poskakování mezi dvěma místy pak postačí:

cd adresář1
cd adresář2
cd -
cd -
cd -

prokládané příkazy podle potřeby.

Máte-li zálusk na komplikovanější pohyby adresářovou strukturou, můžete použít zásobník adresářů. Jeho aktuální obsah si můžete kdykoli vypsat příkazem dirs (vrchol je vlevo, s volbou -v přidá i čísla položek). V zásadě platí, že na jeho vrcholu je vždy aktuální adresář. Příkaz cd jako jeden ze svých účinků změní adresář na vrcholu zásobníku.

Přidání nové položky zajistí příkaz pushd adresář. Narozdíl od cd zachová aktuální obsah zásobníku a zadaný adresář přihodí na jeho vrchol, nad všechny stávající. Samozřejmě se do daného adresáře přepne.

Když použijete pushd bez parametrů, prohodí navzájem horní dva prvky zásobníku adresářů (a přesune vás do toho, který je momentálně na vrcholu). Jestliže jako parametr zadáte číslo v podobě +n, provede rotaci horních n prvků zásobníku tak, že n-tý prvek se přesune na vrchol a všechny ostatní o jednu pozici poklesnou.

Opakované kroužení mezi trojicí adresářů zajistí následující sekvence příkazů:

pushd adresář1
pushd adresář2
pushd adresář3

a pak už jen pořád dokola pushd +3.

Odebírání adresářů ze zásobníku má na starosti příkaz popd. Bez parametrů odebere vrchol (a přesune vás do adresáře, který se ocitne na vrcholu). S parametrem +n odebere n-tý prvek. Jak pushd, tak popd po svém provedení vypíší výslednou podobu zásobníku.

Prompt, to je výzva

Ohlášení interpretu, kterým vás vyzývá k zadání příkazu, může obsahovat celou řadu zajímavých informací. Těmi nejžádanějšími bývají aktuální adresář a jméno počítače, pokud míváte ve zvyku pracovat na několika strojích najednou.

Já jsem dost dlouho hledal kompromis mezi dostatkem informací v ohlášení interpretu a dostatkem prostoru pro vlastní příkaz. Nakonec jsem skončil u dvouřádkového promptu. První řádek obsahuje informace pro mou potřebu a do druhého zapisuji příkaz. Konkrétně jsem si zvykl na prompt v této podobě:

manicka:/home/sa­trapa/doc/clan­ky/root
64 >

Obsahuje jméno počítače a aktuální adresář, ve druhém řádku pak jen číslo aktuálního příkazu.

Podoba ohlášení interpretu se definuje prostřednictvím proměnné prostředí PS1 pro bash a prostřednictvím proměnné interpretu prompttcsh. Často se v nich objevují následující informace:

Tabulka č. 115
bash tcsh
aktuální adresář \w %/
jméno počítače \h %m
jméno uživatele \u %n
číslo příkazu v historii \! %!
čas (neběží!) \t %T
datum \d %D. %W. %Y

Podívejme se, jak by se dalo vyrobit výše předvedené ohlášení interpretu. Osvědčilo se mi nechat si je vypisovat tučně, aby se odlišilo od běžných výstupů.

bash
PS1='\h:\w\n\! > '
Tučnost neumím. Zřejmě se bude realizovat prostřednictvím \[ a \], mezi které můžete uzavřít znaky pro řízení terminálu, ale jsem příliš sexy, abych je hledal. Najde se v diskusi někdo, kdo vyrobí tučný prompt?

tcsh
set prompt='%B%m:%/\n%! >%b '
Sekvence %B zapne a %b vypne tučné písmo.

Co je to tcsh?

Zřejmě jste si všimli, jak všude zarputile uvádím interpret tcsh. Přitom snad všechny současné distribuce Linuxu se shodují v tom, že jako implicitní nastavují bash.

Pro vysvětlení si zase trochu zavzpomínám. Kdysi dávno existovaly jen dva interprety: sh a csh. Všeobecně se doporučovalo, že sh je ideální pro psaní skriptů, zatímco pro interaktivní práci je v podstatě nepoužitelný (např. neměl historii příkazů). U csh tomu bylo naopak.

bash je pokračovatelem sh, zatímco tcsh navazuje na csh. Rozdíly v praktické použitelnosti již zdaleka nejsou takové, jako za času onoho johoho. Nicméně přesto si troufám tvrdit, že tcsh je pro interaktivní práci o chlup lepší. Jeho opravář překlepů je velmi cenným pomocníkem a také v oblasti doplňování mi lépe sedne do ruky. Proto jej používám dodnes, přestože většina uživatelů se drží implicitního bash.

root_podpora

Používání dvou interpretů (jeden interaktivní, druhý pro skripty) není zase tak strašná újma, jak by se na první pohled mohlo zdát. Je sice otravné držet si v hlavě dvě různé podoby pro přiřazování proměnných a přesměrovávání vstupů/výstupů, ale o mnoho dál schizofrenie nejde. Většinu ostatních konstrukcí člověk beztak používá buď jen ve skriptech, nebo na příkazovém řádku, takže si stačí pamatovat jen jednu verzi.


A to bude ode mne o interpretech a jejich funkcích asi tak vše. Doufám, že vám tyto dva články byly užitečné a že přispějí k zpříjemnění vaší práce.

Byl pro vás článek přínosný?

Autor článku

Pavel Satrapa působí na Ústavu nových technologií a aplikované informatiky na Technické univerzitě v Liberci, píše knihy a motá se kolem tuzemské akademické sítě CESNET.