Scopri quale comando ho eseguito l'ultima volta che inizia in un certo modo?


9

Nell'ambiente bash commandline, puoi eseguire !!di nuovo il tuo ultimo comando. E puoi premere la freccia su per vedere l'ultimo comando che hai eseguito. E se volessi vedere solo ma non eseguire l'ultimo comando che hai eseguito che è iniziato in un certo modo?


1
Potresti per favore modificare la tua domanda. Non sono ancora chiaro cosa stai chiedendo.

Risposte:


19

Se cerchi la cronologia tramite Ctrl+ re digitando alcune lettere del comando e non premendo Enterma premendo , il comando verrà visualizzato e non verrà eseguito. Un'altra alternativa è:

history | grep 'mycommand'

Anche questo simpatico foglietto storico potrebbe essere d'aiuto.


1
E se non stai cercando la prima corrispondenza e vuoi continuare a cercare all'indietro, premi Ctrl-R ancora e ancora. E questo è solo uno dei tanti potenti comandi forniti dalla cronologia di bash e dalla libreria readline.
Orion,

Considerando che hai la risposta verificata, tirerò la mia e se vuoi usare l' "^.\{7\}pattern"espressione nella tua risposta, sei il benvenuto per farlo!

se vuoi modificare diversi comandi ed eseguirli di nuovo puoi anche usarefc ### ###
Kiwy

10

È possibile mostrare l'ultima esecuzione del comando, aggiungendo :pa !!:

$ echo 123
123
$ !!:p
echo 123

Se vuoi mostrare l'ultimo comando eseguito con un certo nome, usa un'esclamazione:

$ echo 123
123
$ pwd
/home/cuonglm
$ !echo:p
echo 123

4

Ogni risposta qui, per quanto posso dire, non è portatile. Per un'opzione portatile, considera POSIX garantito fc:

    $ man fc

-E editor Usa l'editor nominato dall'editor per modificare i comandi. La stringa dell'editor è un nome di utilità, soggetto a ricerca tramite lavariabile PATH ... Il valore nellavariabile FCEDIT deve essere usato come predefinito quando -e non è specificato. Se FCEDIT è nullo o non posto, ed è utilizzato come l'editor.

-L (La lettera ell.) Elenca i comandi anziché invocare un editor su di essi. I comandi devono essere scritti nella sequenza indicata dal primo e dall'ultimo operando, come influenzato da -r , con ciascun comando preceduto dal numero di comando.

-N Elimina i numeri di comando quando si elenca con -l .

-R Inverte l'ordine dei comandi elencati (con −l ) o modificati (senza −l−s ) .

-S Riesegue il comando senza invocare un editor.

OPERANDI

primo , ultimo Selezionare i comandi da elencare o modificare. Il numero di comandi precedenti a cui è possibile accedere è determinato dal valore dellavariabile HISTSIZE . Il valore di primo o ultimo o entrambi deve essere uno dei seguenti:

[+ o-] numero Un numero positivo (o negativo ) che rappresenta un numero di comando; i numeri di comando possono essere visualizzati con l'opzione −l ... Ad esempio, −1 è il comando immediatamente precedente ...

Quando l' opzione −l viene utilizzata per elencare i comandi, il formato di ciascun comando nell'elenco deve essere il seguente:

    "%d\t%s\n", <line number>, <command>

Se vengono specificate entrambe le opzioni −l e −n , il formato di ciascun comando deve essere:

    "\t%s\n", <command>

Se la è costituito da più di una riga, le righe successive alla prima devono essere visualizzate come:

    "\t%s\n", <continued-command>

Assicurati di usare -l o -e se vuoi SOLO vedere / modificare i tuoi comandi. Per impostazione predefinita, fcverrà aperto l'elenco dei comandi richiesto in FCEDIT (si noti che è diverso dalla variabile di ambiente EDITOR ) e, quando FCEDIT si chiude, fceseguirà i comandi modificati.

Ad ogni modo, in particolare la risposta a questa domanda potrebbe essere:

    % fc -l -1

O senza numeri di riga:

    % fc -ln -1

O gli ultimi cinque comandi in ordine inverso:

    % fc -lrn -1 -5

Nel tuo cercapersone:

    % fc -lrn -1 -5 |$PAGER

Per la tua ultima chiamata a fc:

    % fc -l fc

+1 per sforzo. Tuttavia, la domanda è taggata bash
grebneke il

Funziona bashe tutto il resto. L'uso di bashnon preclude la portabilità, ma sicuramente svilupperà cattive abitudini.
Mikeserv,

La migliore risposta qui e dovrebbe essere quella accettata, a causa della portabilità.
wildeyes,

3

premi Ctrlrquindi inizia a digitare il comando che vuoi vedere. bash verrà completato in modo incrementale. Quando sei soddisfatto, premi Enterper rieseguirlo o Ctrlgper interrompere.


2

Se vuoi solo l'ultimo comando usa:

 history | cut -c 8- | tail -n 2 | head -n 1 

Se vuoi essere in grado di farlo ripetutamente, metti uno spazio prima historyo usa:

 history | cut -c 8- | grep -Ev '^history' | tail -n 1

Se vuoi solo vedere l'ultimo comando che inizia con il modello xyz:

 history | cut -c 8- | grep -E '^xyz'  | tail -n 1 

Ma questo non funziona se lo schema sarebbe i caratteri iniziali della "storia" e quindi avresti bisogno di qualcosa del tipo:

history | cut -c 8- | grep -Ev 'history \|' | grep -E '^hist'  | tail -n 1 

C'è un errore di battitura nel tuo primo utilizzo di cut.
Jon

1
bind '"\ep": history-search-backward'
bind '"\en": history-search-forward'

E poi puoi inserire del testo e quindi Alt-pcercare gli ultimi comandi che iniziano lo stesso (e Alt-p, Alt-nper scorrere avanti e indietro attraverso di essi).

(Questi sono i tasti di scelta rapida predefiniti per widget simili in zsh)


0

Aggiungi queste righe in un file ~/.inputrc:

"\e[A": history-search-backward
"\e[B": history-search-forward

Quindi source ~/.inputrcnella tua shell (o semplicemente riavvia la shell).

Ora puoi digitare alcune lettere del comando, quindi utilizzare le frecce su / giù per scorrere i comandi che iniziano con quelle poche lettere.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.