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 Ctrl –r 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 Ctrl –h (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.
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... Ctrl –r . 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 Ctrl –r viene interpretato come un comando di repaint e sono sorpreso ogni volta che provo a farlo in bash
e fa qualcosa di diverso!