Come posso cercare nella cronologia di bash e rilanciare un comando?
Posso cercare la storia in bash ed eseguire il risultato?
Posso cercare la storia in bash ed eseguire il risultato?
In alternativa a crtl+R, potete cercare nella cronologia digitando
!text
Questo cercherà nella cronologia il comando più recente che inizia con ‘testo’.
Ma vi suggerisco di metterlo nel vostro .bashrc per prevenire l'esecuzione di un comando sbagliato.
shopt -s histverify
Questo istruisce bash in modo tale che, dopo qualsiasi azione della cronologia (come !!:s/prev_text/after_text
), metta la linea risultante al prompt dei comandi. Poi si può rivedere o modificare il comando, e poi premere Invio.
Preferisco usare history-search-backward piuttosto che reverse-search-history. Il primo permette di digitare alcuni caratteri del comando poi premere il tasto di ricerca, al contrario di premere prima il tasto di ricerca e poi digitare la stringa di ricerca.
Di default sul mio sistema, M-p e M-n si legano a funzioni simili, ma io preferisco legare i tasti freccia:
bind '"\e[A":history-search-backward'
bind '"\e[B":history-search-forward'
Un eccellente resoconto, Sean! Lo metterei in un commento, ma ho qualche punto di reputazione in meno :-)
Un'altra tecnica correlata e utile è la capacità di eseguire un comando precedente mentre si cambia una parola. Diciamo che avete sbagliato il nome della directory, o volete cambiare il nome del file:
$ echo my name is bob my name is bob $ ^bob^jordan echo my name is jordan my name is jordan
Notate che il comando viene espanso, sostituito e visualizzato prima che il comando venga eseguito, così se viene eseguito il comando sbagliato potete vedere cosa bash pensava di fare.
Poiché la navigazione attraverso la cronologia usando Ctrl-r è IMO ingombrante, potresti voler considerare hh : https://github.com/dvorka/hstr
che rende la navigazione molto più semplice, diretta ed efficiente - inclusa l'esecuzione del comando:
Al prompt dei comandi di bash, digitate control-R, poi digitate alcuni caratteri del comando che volete e la funzione readline di bash cercherà quel comando nella cronologia dei comandi.
Dopo aver iniziato la ricerca, potete digitare di nuovo control-R per saltare al prossimo comando corrispondente.
Se hai la tua shell configurata per usare le associazioni di tasti vi
(set -o vi
o avere set editing-mode vi
in $HOME/.inputrc
), allora cerchi con <Esc>/some-command<Return>
e premi n
(successivo) o Shift-n
(precedente) per scorrere la storia della linea di comando.
Mi piace HSTR ma a volte non riesco a installarlo. Così ho scritto un alias usando fzf che imita il suo comportamento (hx
, per “history execute”)
alias hx='eval $(history | sed "s/^ *[0-9]* *//g" | fzf --tac --tiebreak=index --height=10)'
history
: bene, ottieni la storia sed
: rimuovi la colonna dei numeri dalla lista (POSIX) fzf
: ecco la magia, ti permette di fuzzy-search la lista interattivamente, o muoverti con C-J
e C-K
, poi esegui un comando con Enter
. --height
: imposta il numero di linee mostrate. --tac
: ripristina la lista (più logico per una storia) --tiebreak=index
: mantiene l'ordine della storia quando fzf aggiorna i risultati