Portál AbcLinuxu, 24. dubna 2024 16:31

Unixové nástroje – 26 (triky pro práci v Bashi)

19. 12. 2013 | Luboš Doležel
Články - Unixové nástroje – 26 (triky pro práci v Bashi)  

Uživatel je člověk líný a o pokročilých uživatelích to platí dvojnásob. V předchozích dílech tohoto seriálu jste se mohli dozvědět o různých nástrojích, které vám mohou ulehčit život. Tentokrát se podíváme na něco jiného z tohoto soudku.

Hlavní výbavou čtenářů tohoto seriálu je nepochybně terminál a s velkou pravděpodobností v něm používáte právě Bash. V tomto díle si ukážeme některé základní triky, jak si každodenní práci usnadnit. (Autor nevylučuje, že řada ukázek bude fungovat i v jiných shellech a aplikacích, co používají readline.)

Obsah

Hledání v historii

link

Toto je naprosto elementární věc, ale přesto se potkávám s lidmi, kteří jsou němí úžasem, jakmile mě uvidí pracovat v Bashi pomocí této zkratky neuvěřitelnou rychlostí. Po stisku Ctrl+R s vám v konzoli objeví následující prompt:

(reverse-i-search)`': 

Od této chvíle, jakmile začnete psát střepy příkazů, co jste použili v minulosti, budou se vám z historie objevovat kompletní příkazy. Pokud napíšete například ssh, může se vám objevit něco takového:

(reverse-i-search)`ssh': ssh root@zeus

Stiskem enteru se tento nalezený příkaz použije. Pokud jej chcete před provedením poupravit, stačí rovnou použít šipky na klávesnici a vyhledávání se tím přeruší (nebo také stiskem Ctrl+J). Chcete-li stejný zadaný střep hledat hlouběji v minulosti, stiskněte znovu Ctrl+R, dokud nenajdete to, co hledáte, případně střep rozšiřte.

Po nějaké době se dostanete do situace, kdy jste příliš líní nějaký příkaz napsat sami, a tak marně hledáte v historii, až ho najednou omylem přeskočíte. Druhým směrem můžete hledat pomocí zkratky Ctrl+S – ta je ovšem zapeklitá tím, že emulátory terminálu (jako třeba Konsole) mají na tuto zkratku napamováno zastavení výstupu (XOFF). Nevím, jak často tuto funkci pro pozastavení používáte, ale jestli stejně jako já nikdy (a ještě se divíte, co se to stalo, když Ctrl+S omylem stisknete), není nic jednoduššího, než tuto funkci zakázat:

Konsole

Druhým způsobem řešení je přidat si do souboru ~/.bashrc tento příkaz:

stty -ixon

Třetím řešením je ustoupit a namapovat si na tuto funkci jinou klávesovou zkratku. Například Alt+R. Do souboru ~/.inputrc vložte tyto řádky:

$include /etc/inputrc # pokud soubor vytváříte poprvé

"\er":forward-search-history

Jestliže vám při hledání začne vadit, že se stále dokola objevují ty samé příkazy, není nic snazšího, než si vypnout ukládání duplicitních položek v historii. Opět se podíváme do souboru ~/.bashrc a přidáme:

export HISTCONTROL=ignoredups

No a jen drobnost na závěr: stopy po své práci zahladíte příkazem history -c, který historii vymaže.

Opravujeme své chyby

link

Chyby dělá každý a jsou o to nepříjemnější, pokud je uděláme uprostřed dlouhého příkazu. Jako člověk neznalý různých triků jsem v takových případech okopíroval první polovinu příkazu, napsal opravenou část a okopíroval zbytek. Horší způsob je pak otrocky držet šipku doleva. Jsou ale i lepší způsoby.

Tím prvním je rychlé skákání po slovech napsaných na vstupu terminálu (pozor, ne po argumentech). S tím vám pomůže snadno zapamatovatelné Alt+← a Alt+→. Když to člověk pokazí hodně, tak je lepší rovnou mazat. Předchozí slovo snadno umažetete stiskem Ctrl+W, ale když už držíte ten Alt, tak i pomocí Alt+Backspace.

Fajnšmekři na to mohou jít od lesa a případný překlep nechat opravit za sebe. Člověk občas něco nabuší z hlavy a po dlouhém psaní zjistí, že tam byla chyba. Nevadí! Stačí napsat ^chybná část^opravená část.

lubos@zeus ~ $ cd /us/share/games/openarena/
bash: cd: /us/share/games/openarena/: No such file or directory
lubos@zeus ~ $ ^us^usr
cd /usr/share/games/openarena/
lubos@zeus /usr/share/games/openarena $

Bash provede jednoduché nahrazení části textu za jinou a po stisku enteru vypíše opravenou verzi a příkaz provede. Pěkné je, že opravenou verzi přidá i do historie příkazů.

link

S navigací v adresářové struktuře to nebývá vždy legrace. Třeba takový Midnight Commander (MC) má volitelnou funkci, kdy jste po jeho ukončení v terminálu přesunuti do posledního adresáře, ve kterém jste v MC pracovali. Mimochodem ji aktivujete přidáním

. /usr/libexec/mc/mc.sh

opět do ~/.bashrc. No a třeba právě tato jinak sympatická věc se vám občas vymstí, protože po rychlém provedení práce v MC zjistíte, že vás to hodilo daleko od místa, než jste byli. Pokud píšete skripty v Bashi, tak určitě znáte pushd a popd, ale pokud jste neudělali pushd před změnou adresáře, tak vám popd už není platné.

Lepší je napsat:

cd -

který vás do předchozího adresáře vrátí. Pamatuje si jen jeden předchozí adresář, opakované cd - vás zase vrátí zpátky, kde jste nechtěli být. Mimochodem cd samotné vás přesune do vašeho domovského adresáře, ale to už jistě znáte ;-)

Nevím jak vám, ale mně osobně systém souborů citlivý na velikost písmen (case sensitive) vyhovuje. Co mi ale nevyhovuje, je když se při procházení adresářovou strukturou překlepnu ve velikosti písmene a nedostávám kvůli tomu po stisku TAB žádnou nápomoc. Řešením je přidat do ~/.inputrc tento povel:

set completion-ignore-case on

Nutno dodat, že toto se opravdu týká jen doplňování. Mimo doplňování, tedy při stisku enteru, to po vás chyby neopraví.

Omezené klávesnice

link

Velice často přistupuji přes SSH na server ze svého telefonu s Androidem. Jelikož nemám hardwarovou klávesnici (a ne vždy je praktické přepínat na jinak výbornou Hacker's Keyboard), hodí se znát způsob, jak si naemulovat klávesy, které nemáte. Předpokladem je, že máte jak stisknout Ctrl (například ConnectBot to umožňuje).

Základním nástrojem je Ctrl+I, které funguje jako tabulátor. Softwarové klávesnice často postrádají i šipky, které můžete simulovat pomocí Ctrl a písmen B a F (doleva a doprava, back a forward) a P a N (nahoru a dolu, previous a next).

Pokud ještě píšete exit pro ukončení shellu, pak si raději zvykněte na Ctrl+D. To funguje jen na prázdném řádku – pokud už máte na řádku text (kterého se snadno zbavíte pomocí Ctrl+C), pak Ctrl+D přebírá funkci klávesy Delete, která vám na softwarové klávesnici pravděpodobně také schází.

No a na začátek a konec řádku se dostanete zase pomocí Ctrl+A a Ctrl+E.

Jaké triky používáte vy? Podělte se v diskuzi.

Seriál Unixové nástroje (dílů: 27)

První díl: Unixové nástroje – 1 (úvod, cat, head, tail), poslední díl: Unixové nástroje – 26 (triky pro práci v Bashi).
Předchozí díl: Unixové nástroje – 25 ((s,c)fdisk, gdisk, parted a findmnt)

Další články z této rubriky

Úvod do Dockeru (1)
Paralelizace běžných činností v konzoli pomocí GNU Parallel
Unixové nástroje – 26 (triky pro práci v Bashi)
Unixové nástroje – 25 ((s,c)fdisk, gdisk, parted a findmnt)
Linux: systémové volání splice()

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.