GNU/Linux >> Linux Esercitazione >  >> Linux

Come applicare la digitazione preliminare alla ricerca nella cronologia di Bash (ctrl-r)?

Contesto

Scrivi in ​​bash:bene

Quando una shell bash è occupata (inizializzazione, esecuzione di un comando), è possibile digitare prima che venga visualizzato il prompt successivo .

Se la shell ha avviato un programma, quel programma acquisirà le chiavi, ma se non viene eseguito alcun programma o se il programma non cattura l'input, ciò che si digita viene inserito nella shell dopo che viene visualizzato il prompt.

Ad esempio:digita sleep 5 , premi Invio, quindi digita ls e premere Invio. ls verrà eseguito al termine del sonno. Nella vita reale, ls verrebbe sostituito da cp , rsync o molti altri programmi.
Questa è una tipica funzionalità di Typeahead ed è un ottimo risparmio di tempo quando sai in anticipo cosa digitare.

È anche molto bello poiché consente di copiare e incollare diversi comandi e di eseguirli in sequenza.

Il caso d'uso nel mondo reale include quando la shell richiede tempo per l'inizializzazione. Potrebbe essere che il computer sia rallentato per qualsiasi motivo, o che la shell sia su un collegamento di rete lento, ecc.

Ricerca nella cronologia in bash:buona

Al prompt di bash, è possibile digitare Ctrl-R per cercare nella cronologia.

Questo è un inestimabile risparmio di tempo quando si riutilizzano alcune vecchie righe di comando, o anche una sequenza di righe di comando. Premi Ctrl-R , digita alcuni caratteri tipici del comando da cercare, premi Ctrl-O tutte le volte necessarie per riprodurre i comandi registrati da lì.

Digita avanti nella ricerca cronologica:come ?

C'è una limitazione, però. Spesso uso la sequenza sopra e trovo che se digito ad es. Ctrl-R ls prima che il prompt della shell sia effettivamente apparso, Ctrl-R parte viene ignorata ma ls parte viene mostrata.

L'effetto netto è che bisogna aspettare che appaia il prompt della shell prima di digitare Ctrl-R , vanificando parte del tempo risparmiato.

Domanda

C'è un modo per avere Ctrl-R onorato anche in una situazione di tipo sfavorevole?

Risposta accettata:

Il tuo Ctrlr viene intercettato dal motore di elaborazione della linea di cookie del terminale basato sul kernel.

Mentre sleep è in esecuzione, il terminale è in modalità cotta, il che significa che l'editor di linee tty basato sul kernel funziona. L'editor della riga di tty supporta la modifica rudimentale della riga di comando. Il tasto di cancellazione (solitamente impostato su Ctrlh (backspace) o Canc ) e il tasto kill (di solito Ctrl-U ) sono i tasti di modifica speciali più conosciuti che possono essere utilizzati in questa modalità. Questo editor di righe è utile:è ciò che consente alle utilità interattive che non utilizzano readline né curses di leggere righe complete di input dal terminale consentendo all'utente di apportare correzioni di digitazione.

Correlati:come cercare un database MySQL con campi crittografati?

Ma c'è un altro tasto speciale che è attivo in questa modalità. Puoi vederlo insieme alle altre impostazioni chiave nell'output di stty -a sotto il nome rprnt e la sua impostazione predefinita è... hai indovinato... Ctrlr . La funzione di questa chiave è di ridisegnare la riga di comando corrente, nel caso in cui sia danneggiata o disallineata a causa di un altro output del terminale.

Per evitare ciò, puoi disabilitare la funzione con stty rprnt undef .

Personalmente sono abituato a Ctrlr viene interpretato come un comando di repaint e sono sorpreso ogni volta che provo a farlo in bash e fa qualcosa di diverso!


Linux
  1. Come cancellare la cronologia della riga di comando BASH in Linux

  2. Come cancellare la cronologia di Bash su Linux

  3. Come configurare la shell Bash con restrizioni in Linux

  4. CentOS / RHEL:come disabilitare la cronologia della shell BASH

  5. Come posso trovare aiuto per il comando punto `.` in *nix?

McFly:una sostituzione della funzione di ricerca della cronologia di Bash "Ctrl + R".

Come visualizzare la cronologia di Bash senza numeri di riga

Come abilitare il timestamp nella cronologia di Bash in Linux

Come utilizzare il comando Declare in Linux Bash Shell

Utilizzo della funzione di cronologia su Bash Shell su Ubuntu 16.04 LTS Server

Come eseguire un comando in uno script della shell?