Kontext
Typeahead v bash:dobré
Když je bash shell zaneprázdněn (inicializace, spuštění příkazu), je možné zapsat, než se objeví další výzva .
Pokud shell spustil program, tento program zachytí klíče, ale pokud není spuštěn žádný program nebo pokud program nezachytí vstup, po výzvě se do shellu vloží to, co zadáte.
Například:zadejte sleep 5
, stiskněte klávesu Enter a zadejte ls
a stiskněte Enter. ls
bude spuštěn po dokončení spánku. V reálném životě ls
bude nahrazeno cp
, rsync
nebo mnoho dalších programů.
Toto je typická funkce Typeahead a je to skvělá úspora času, když předem víte, co napsat.
Je to také velmi pěkné, protože umožňuje zkopírovat a vložit několik příkazů a nechat je spouštět postupně.
Případy použití v reálném světě zahrnují případy, kdy inicializace shellu nějakou dobu trvá. Může se stát, že je počítač z nějakého důvodu zpomalený, nebo je shell na pomalém síťovém spojení atd.
Historie vyhledávání v bash:dobré
Na výzvu bash lze zadat Ctrl-R
prohledávat historii.
To je neocenitelná úspora času při opětovném použití některých starých příkazových řádků nebo dokonce sekvence příkazových řádků. Stiskněte Ctrl-R
, zadejte několik znaků typických pro vyhledávací příkaz a stiskněte Ctrl-O
tolikrát, kolikrát je potřeba k přehrání zaznamenaných příkazů odtud.
Typeahead in history search:how ?
Je tu však jedno omezení. Často používám výše uvedenou sekvenci a zjistím, že když napíšu např. Ctrl-R ls
než se skutečně objeví výzva shellu, Ctrl-R
část je ignorována, ale ls
část je zobrazena.
Čistým efektem je, že před zadáním Ctrl-R
musíte počkat, až se objeví výzva shellu , čímž porazíte část ušetřeného času.
Otázka
Existuje způsob, jak mít Ctrl-R
ctěn i v situaci, kdy se jedná o typickou chybu?
Přijatá odpověď:
Váš Ctrl –r je zachycen jádrem založeným na terminálovém procesoru pro zpracování linek cookie.
Když sleep
běží, terminál je v režimu vaření, což znamená, že editor tty na bázi jádra funguje. Editor řádku tty podporuje základní úpravy příkazového řádku. Klávesa mazání (obvykle nastavena na Ctrl –h (backspace) nebo Del ) a klávesu zabíjení (obvykle Ctrl-U ) jsou nejznámější speciální editační klávesy, které lze v tomto režimu použít. Tento editor řádků je užitečný:umožňuje interaktivním utilitám, které nepoužívají ani readline, ani curses, číst celé řádky vstupu z terminálu a zároveň umožňuje uživateli provádět opravy při psaní.
Ale v tomto režimu je aktivní ještě další speciální klíč. Můžete to vidět spolu s dalšími nastaveními kláves ve výstupu stty -a
pod názvem rprnt
a jeho výchozí nastavení je... uhodli jste... Ctrl –r . Funkcí této klávesy je překreslit aktuální příkazový řádek v případě, že byl poškozen nebo nesprávně zarovnán v důsledku jiného výstupu terminálu.
Abyste tomu zabránili, můžete funkci deaktivovat pomocí stty rprnt undef
.
Osobně jsem zvyklý na Ctrl –r je interpretováno jako příkaz překreslit a jsem překvapen pokaždé, když se o to pokusím v bash
a dělá něco jiného!