GNU/Linux >> Znalost Linux >  >> Linux

Jak nechat typ-ahead použít pro vyhledávání v historii Bash (ctrl-r)?

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áš Ctrlr 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 Ctrlh (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í.

Související:Jak prohledávat databázi MySQL se zašifrovanými poli?

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... Ctrlr . 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 Ctrlr 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!


Linux
  1. CentOS / RHEL :Jak zakázat historii shellu BASH

  2. Jak najdu nápovědu pro bodový příkaz `.` v *nix?

  3. Jak spustit příkaz vícekrát pomocí bash shell?

  1. Jak používat příkazy historie Bash

  2. Jak vymazat historii příkazového řádku BASH v Linuxu

  3. Jak vymazat historii Bash na Linuxu

  1. Jak vymazat konkrétní příkaz z historie Bash v Linuxu

  2. Jak provést příkaz v prostředí Shell bez jeho uložení do historie? [Tipy pro Linux]

  3. Jak nakonfigurovat omezený Bash Shell v Linuxu