Hlavní navigace

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

Pavel Satrapa

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.

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.

Našli jste v článku chybu?

27. 11. 2006 12:04

Tomas (neregistrovaný)
Ahoj lidi mohli by jste mi napsat jak psat s dalsim pocitacem v siti?normalne psat mu textove zpravy..dekuji za odpoved na filito@seznam.cz

23. 4. 2001 17:32

Nepritel (neregistrovaný)

Jak vidite, pod dobrem Vas neslo od podzimu nijak prinutit podivat se do error_log(u). Po zlem to bylo napodruhe.

Cele mi to pripada divne. To je, jako kdyby clovek, ktery se nejak podilel na vydavani pravidel pravopisu, delal v dopisech gramaticke chyby. - Pokud se ovsem nestaral jen o editaci pocitacove sazby.

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Vitalia.cz: Taky věříte na pravidlo 5 sekund?

Taky věříte na pravidlo 5 sekund?

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: Poznáte poctivé suroviny na pečení cukroví?

Poznáte poctivé suroviny na pečení cukroví?

Měšec.cz: Air Bank zruší TOP3 garanci a zdražuje kurzy

Air Bank zruší TOP3 garanci a zdražuje kurzy

Měšec.cz: mBank cenzuruje, zrušila mFórum

mBank cenzuruje, zrušila mFórum

Lupa.cz: Teletext je „internetem hipsterů“

Teletext je „internetem hipsterů“

Podnikatel.cz: Podnikatelům dorazí varování od BSA

Podnikatelům dorazí varování od BSA

Vitalia.cz: Proč vás každý zubař posílá na dentální hygienu

Proč vás každý zubař posílá na dentální hygienu

Lupa.cz: Insolvenční řízení kvůli cookies? Vítejte v ČR

Insolvenční řízení kvůli cookies? Vítejte v ČR

Podnikatel.cz: Zavře krám u #EET Malá pokladna a Teeta?

Zavře krám u #EET Malá pokladna a Teeta?

Podnikatel.cz: Chaos u EET pokračuje. Jsou tu další návrhy

Chaos u EET pokračuje. Jsou tu další návrhy

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Vitalia.cz: 9 největších mýtů o mase

9 největších mýtů o mase

120na80.cz: Co všechno ovlivňuje ženskou plodnost?

Co všechno ovlivňuje ženskou plodnost?

120na80.cz: Jmelí je více léčivé než jedovaté

Jmelí je více léčivé než jedovaté

Podnikatel.cz: EET: Totálně nezvládli metodologii projektu

EET: Totálně nezvládli metodologii projektu

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Vitalia.cz: Spor o mortadelu: podle Lidlu falšovaná nebyla

Spor o mortadelu: podle Lidlu falšovaná nebyla

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?