it-swarm.it

Il modo migliore per cercare nella storia di Shell

Esiste un modo migliore per cercare un comando nel mio file di cronologia rispetto a grep? Ho qualche idea di come inizi il comando, ma non so quanto sia lontana nella storia.

pdate: era precedentemente specifico per zsh ma a causa delle risposte sovrapposte sentiti libero di rispondere per qualsiasi Shell (o modalità (vi/emacs)) qui, nota solo se è specifico.

82
xenoterracide

Ctrl+R di solito è il modo migliore, come ha detto il descrittore . Puoi anche usare !string, che esegue il comando più recente che inizia con string o !?string?, che esegue il comando più recente che contiene string.

(Penso che sia l'unica cosa rilevante per questa domanda, ma ho coperto molto di più dei comandi della cronologia in questa risposta )

78
Michael Mrozek

Quando si utilizza Bash, digitare Control-R e quindi iniziare a digitare. Digitando Control-R ripetutamente dopo aver inserito del testo, si torna alle righe di comando corrispondenti.

32
grendel

Non sono sicuro se questo aiuterà, ma mi piace usare ctrl-r e quindi iniziare a digitare il comando. Dovrebbe passare attraverso la tua storia e presentarti la prima partita. Per passare da una partita all'altra basta premere ctrl-r ancora.

18
decriptor

Se aggiungi quanto segue a ~/.inputrc

"\e[5~": history-search-backward
"\e[6~": history-search-forward

e riavvia Bash, puoi iniziare a digitare e quindi utilizzare Page Up e Page Down per spostarsi avanti e indietro nella cronologia delle righe iniziando con lo stesso prefisso appena digitato.

(Alcuni potrebbero preferire l'uso di \e[A e \e[B, che sostituirà il normale Up e Down azioni invece di associare nuove chiavi.)

17
ephemient

Il prompt interattivo invocato da Ctrl-R, che era già stato menzionato, è il modo più conveniente. Inoltre è popolare rimappare Up e Down tasti freccia per cercare nella cronologia un prefisso attualmente sulla riga di comando, tuttavia ciò richiede alcuni cambia in ~/.inputrc file .

La soluzione classica e meno interattiva è utilizzare l'espansione della cronologia Shell. Digitando

!foo

eseguirà l'ultimo comando che inizia con foo e

!?foo

eseguirà l'ultimo comando che contiene foo. Ulteriori informazioni sull'espansione della cronologia sono disponibili nel manuale di riferimento di Bash , supponendo che Shell sia Bash o compatibile.

9
Adam Byrtek

Se aggiungi stty -ixon alla tua ~/.bashrc file quindi Ctrl-s andrà nella direzione opposta a Ctrl-r.

Se si digita !ls quindi bash esaminerà la tua cronologia ed eseguirà il comando più recente che inizia con "ls"

3
Kevin M

potrebbe essere specifico per zsh. Nella ricerca questa risposta I trovatovi-history-search-backward che consente di cercare / in modalità vi (di cui non ho parlato in precedenza) è quindi possibile utilizzare n e N per cercare rispettivamente avanti e indietro (dopo aver premuto enter).

2
xenoterracide

Sono sorpreso che questo non sia stato menzionato, ma puoi selezionare vi-mode in bash o ksh facendo questo:

set -o vi

... o usando questo come contenuto di ~/.inputrc (per GNU utilizzato in programmi come bash):

set editing-mode vi

Quindi dopo puoi usare Esc per inserire modalità comando e utilizzare k per tornare indietro nella storia e j per andare avanti. Puoi anche cercare usando / per cercare normalmente, e ? per cercare al contrario.

Se usi ~/.inputrc, allora questo funzionerà non solo in GNU bash ma in tutto ciò che usa GNU readline come CLISP e possibilmente programmi come il comando MySQL Shell e simili la shell CPAN.

2
Mei

Per passare in avanti quando si utilizza la ricerca inversa (con il comando Ctrl-R):

  1. Apri il tuo file .bashrc:
    Sudo gedit ~/.bashrc

  2. aggiungi questa riga (la lettera "f" può essere sostituita con un'altra non ancora utilizzata dal sistema)

    bind '"\C-f": forward-search-history' 
    
  3. Chiudi il tuo file e aggiorna il tuo .bashrc (o apri un altro terminale) con il comando:
    source ~/.bashrc o . ~/.bashrc

ORA PUOI ANDARE AVANTI NELLA STORIA CON LO SCORCIATO: Ctrl + f

Lavorando su Ubuntu 18.04 LTS

2

Uso seguendo due la maggior parte delle volte.
Ma ti preghiamo di notare che entrambi cercano caratteri iniziali.

  1. tcsh: digita quindi alcuni caratteri del comando Esc+p mostrerà il comando precedente a partire da quella sequenza di tasti premendolo di nuovo mostrerà un altro comando.
  2. ksh: usa fc -e - <SPACE><first few char for your previous > questo eseguirà l'ultimo comando corrispondente a quella sequenza.

Non sono riuscito a trovare qualcosa del genere Ctrl+R in Bash per il mio ksh e tcsh.

1
Hemant

C'è un modo di usare Ctrl-R con tcsh. Aggiungi quanto segue nel tuo ~/.cshrc:

bindkey "^r" i-search-back (è solo un segno con il cursore e la lettera r)

Questo è il più grande risparmio di tempo per me.

1
Alain

risposta simile a @ephemient, ma puoi inserirla nel tuo .bashrc

bind '"\e[A": history-search-backward'
bind '"\e[B": history-search-foward'

e digita parte della frase, quindi usa la freccia su/giù per sfogliare le opzioni più recenti corrispondenti. Questo è il comportamento predefinito di matlab.

Per la maggior parte delle persone, se desideri trasferire le tue impostazioni su un nuovo sistema, è più facile ricordare di afferrare solo il tuo ~/.bashrc allora quello che devi afferrare che ~/.inputrc

1
Matt S.

Sì, esiste, almeno se stai usando zsh. Inizia a digitare il comando e poi premi M-p (ESCp) e troverà i comandi precedenti che corrispondono a ciò che hai digitato. Premerlo di nuovo per trovare la prossima partita.

0
dkagedal