Seleziona i comandi dalla cronologia di bash


20

Premere il pulsante su è noioso e potrei perdere il comando che stavo cercando. Quindi, digitando historysul terminale mi dà tutti i comandi che ho inserito prima, indicizzati a un numero. Esiste un modo per chiamare semplicemente il numero associato al comando?


qualche altra opzione interattiva ormai? questi sono così soggetti a errori
matt

Risposte:


31

La storia di Bash può fare molte cose utili e la ricerca con Strg-rquella menzionata da Terry Wang è importante. Ma è anche possibile fare esattamente quello che hai chiesto.

Puoi ripetere il comando precedente con !!. Con questo, puoi anche modificare il comando precedente. Se ad esempio hai dimenticato di ottenere i privilegi di root per un comando

apt-get install a-long-list-of-packages

non è necessario ripetere la digitazione di nuovo. Invece chiama e basta

sudo !!

Se si desidera eseguire nuovamente il comando in una posizione specifica della cronologia, è possibile utilizzare !, ad esempio

!3

per rieseguire il comando in posizione 3. Tenere presente che questo conta dall'alto. Quindi, se stai memorizzando 500 comandi nella tua cronologia, !1sarebbe "500 comandi fa". Puoi anche usare numeri negativi. Per esempio

!-2

eseguirà nuovamente il secondo ultimo comando.

Puoi anche rieseguire l'ultimo comando iniziato con una stringa come

!apt-

che rifarebbe l'ultima riga che inizia con "apt-". Se vuoi l'ultimo comando in cui la stringa appare in qualsiasi punto della linea, puoi usare qualcosa di simile

!?pt-ge

Ci sono cose più interessanti che la storia di Bash può fare. Solo per dare un'idea della vasta gamma di possibilità, è possibile accedere in modo specifico a un parametro di un comando dalla cronologia. Così

!-5:3:p

stampa il terzo parametro sul quinto dall'ultimo comando.

EDIT: Per quanto riguarda il commento di Rudie di seguito, con le impostazioni standard queste espansioni della storia bash vengono effettivamente eseguite direttamente. Probabilmente è meglio descritto in questo modo: una chiamata simile !-3viene sostituita dalla shell con il terzo ultimo comando della cronologia e quindi eseguito l'input (con la sostituzione). Quindi se digiti !-3e premi ENTERe il tuo ultimo comando era ls ~, è in effetti lo stesso che se avessi digitato di ls ~nuovo e premuto ENTER"da solo".

Se non lo desideri, puoi impostare l'opzione shell histverify. Per impostare e annullare le opzioni della shell, potresti voler leggere il shoptcomando. Con histverifyset, una chiamata come !-3scrive solo la sostituzione dalla cronologia alla riga di comando, ma non la esegue direttamente. Devi, per dirla in fretta, premere ENTERte stesso il cruciale - o astenersi da esso, se lo desideri.


Quindi !è dannatamente pericoloso ... Vorrei sapere cosa ha !-4fatto esattamente prima di eseguirlo. O ti mostra prima? Riepilogo interessante!
Rudie,

1
@Rudie Questo è un buon punto, ho aggiornato la mia risposta. Le funzionalità della cronologia hanno principalmente lo scopo di velocizzare il tuo lavoro e salvarti i tasti. Quindi uno standard "Intendi davvero, davvero?" sconfiggerebbe almeno in parte tale scopo. E anche se tu potessi, normalmente non chiamerai un comando "molto indietro" come !-238. Non dovrebbe essere troppo difficile ricordare il tuo secondo ultimo, terzo ultimo, forse ultimo comando;) Come spesso accade con Linux (e, in realtà, con l'informatica in generale), ci si aspetta che tu sappia cosa stai facendo. E se vuoi davvero la rete di sicurezza aggiuntiva, è a una shoptdistanza;)
Henning Kockerbeck,



3

Se hai trovato il numero di cronologia di un comando e desideri eseguirlo di nuovo, digita !seguito dal numero, ad es. !1234E premi Enter. Questo fa parte dell'espansione della storia ; puoi attaccare i modificatori su di esso.

Se si desidera modificare il comando prima di eseguirlo, fc 1234invoca un editor esterno.

Ma come ha già detto Terry Wang, di solito ci sono modi più veloci per localizzare un comando nella cronologia rispetto a determinarne il numero di cronologia, incluso Ctrl+ Rper invocare la ricerca incrementale (premere Enterquando hai trovato il comando che vuoi eseguire), o fc PREFIXper eseguire il precedente comando che inizia con PREFIX.


1

Il historycomando mostrerà tutti i comandi e i loro numeri associati. Se vuoi semplicemente fare un rapido controllo prima di eseguire la riga di comando # 135 puoi digitare:

echo !135

Questo ti mostrerà cosa verrà eseguito.

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.