Come copiare un comando precedentemente immesso utilizzando l'utilità di cronologia senza eseguirlo di nuovo?


14

Sono in grado di utilizzare il historycomando su CentOS per ottenere l'elenco dei precedenti comandi immessi, tuttavia, se faccio qualcosa del tipo:, la !372cronologia tenterà di eseguire il comando di riferimento.

Ho bisogno che il precedente comando di esecuzione appaia nel cursore corrente. Ecco un esempio:

[dev@home ~]$ previous_command_no_execute!372  

Risposte:


25

Che ne dici, metti questo sulla tua riga di comando:

$ !372

Quindi premere ESCseguito da CTRL+E. Questo si espanderà automaticamente sulla riga di comando senza eseguirlo effettivamente. (espande anche tutto il resto sulla linea, compresi gli ambienti)

Questo funziona solo su Bash, per quanto ne so.


Sì, questa è la soluzione esatta.
centosnoob,

1
Per una soluzione in zsh, premi tab dopo aver digitato !372e lo espanderà per te.
Reid

10

È possibile utilizzare Ctrlre quindi digitare alcuni caratteri dal comando originale ad es

(reverse-i-search)`/etc': sudo /etc/init.d/apache2 restart

sopra ho digitato Ctrl-r /etce tirato su il sudo /etc/init.d/apache2 restartcomando dalla storia


6

history | grep 372 dovrebbe funzionare, vero?

Modificare:

Inoltre potresti fare qualcosa come echo !372 > /dev/clipmettere la directory dei comandi negli appunti.


ha sempre funzionato per me ...
voretaq7,

no che trova solo quel comando specifico precedentemente eseguito.
centosnoob,

Quindi sia io che @ voretaq7 stiamo fraintendendo la tua domanda. Potresti forse essere un po 'più chiaro?
MDMarra,

@MDMarra Ho aggiornato la domanda. Spero che faccia ulteriore luce.
centosnoob,

@centosnoob guardando il tuo aggiornamento e supponendo che la tua console supporti un mouse e un copia-incolla (ed è raro essere direttamente sulla console in stile terminale senza capacità di copia-incolla in questi giorni) la soluzione di copia e incolla è davvero la meno dolorosa . editing comando vi stile, come ho descritto nella mia risposta è un'altra opzione, ma io sono un VI zelota e anche io non utilizzare l'editing della riga di comando in stile vi ...
voretaq7

4

MDMarra ha fornito il modo più semplice ( history|grepe copia / incolla usando l'ambiente desktop, supponendo che tu ne abbia uno). Fornirò ciò che chiamo nel modo più duro, che funziona se non si dispone di un ambiente desktop o un mouse.

Supponendo che stai eseguendo bash come shell:

$ set -o vi
$ ESC372k

(ora avrai il comando che hai eseguito 372 comandi fa, sulla linea, e sarai in vimodalità di comando in stile. Modifica come faresti se stessi usando ex/ vi)


Interessante. Questo sembra funzionare solo se "set -o vi" è stato avviato in anticipo. Dovrebbe metterlo nel profilo bash o qualcosa del genere.
Matt

Questa è una di quelle "io uso sempre vi, perché non sto usando le associazioni vi per modificare le linee in bash" cose che realizzi con uno shock. Ci vuole un po 'di tempo per abituarsi, quindi le associazioni in stile emacs che tutti gli altri usano sembrano strane e inutili.
cjc,

@Matt Sì: è necessario impostare la modalità di modifica su vimodifica stile. Si dovrebbe lavorare non appena si set -o vi, e dovrebbe funzionare per tutta la cronologia (la modalità di modifica è solo un'interfaccia per cronologia dei comandi della shell e le altre cose).
voretaq7,

@cjc Uso vi come editor preferito, ma non uso i collegamenti in stile vi per modificare la mia riga di comando (mi è capitato di sapere come farlo in modalità vi dalla parte superiore della mia testa, ma altri hanno pubblicato l'equivalente in modalità emacs che potrebbe essere più amichevole :).
voretaq7,

4

Il modo più semplice e veloce per fare ciò che vuoi è eseguire:

!372:p

seguito da Entere


0

Sei su un sistema desktop o server?

Sul mio sistema desktop Kubuntu con la shell aperta supporta l'evidenziazione con il mouse. Solitamente evidenzio il testo con il mouse e faccio clic con il pulsante centrale del mouse per incollarlo. Funzionerebbe per te?

Quindi puoi grep per il comando. Evidenzia il testo. Incollalo con il pulsante centrale del mouse, quindi modificalo.

Potrebbe esserci un modo migliore ma questo funziona per me.


0

non esiste alcun comando per eseguire l'incollamento automatico, ma è possibile richiamare qualsiasi comando in un editor per modificarlo prima di eseguirlo. questo può ottenere ciò che stai cercando, ma all'uscita dal comando verrà eseguito quindi se vuoi interrompere, dovresti cancellare il tuo buffer di modifica prima di uscire dal tuo editor.

fc -e vi 372 372

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.