it-swarm-eu.dev

Usando la cronologia di bash per ottenere un comando precedente, copialo e poi "eseguilo" ma con il comando commentato

Solo una domanda per migliorare le mie abilità bash. Lo faccio sempre:

$ history | grep some_long_command

...
...
123 some_long_command1.........
124 some_long_command2.........
...

Posso quindi eseguire il comando il comando che ho trovato facendo:

!123

Tuttavia, spesso voglio farlo:

some_long_command1foobar

Cioè cambia il comando prima di eseguirlo. Puoi usare bash per eseguire questo comando invece:

#some_long_command1

quindi viene commentato.

Quindi non devo usare il mouse per evidenziare il comando, modificarlo e quindi eseguirlo (posso solo usare la tastiera - più veloce).

Suppongo che potrei scrivere una sceneggiatura per farlo ma potrebbero esistere già delle funzionalità in qualche luogo ....?

Grazie.

77
ale

Suggerirei invece di usare il comando history, si usa ctrl+r e si inizia a digitare quel comando. Quando si preme un tasto freccia come se fosse necessario andare a modificarlo, il riconoscimento del completamento automatico scomparirà e sarà possibile modificarlo prima dell'esecuzione.

AGGIORNAMENTO: inoltre, se vuoi scorrere i diversi comandi che contengono la stringa appena digitata, continua a premere ctrl+r

137
Miquel

In realtà, puoi semplicemente aggiungere :p al comando per stamparlo senza effettivamente eseguirlo. Per esempio:

$ ls -la
$ !!:p

Stamperà ls -la come il comando precedente senza eseguirlo, e puoi semplicemente premere  (su) per trovarlo e modificarlo.

Puoi anche fare

!123:p

per stampare il comando 123rd come comando precedente.

58
joeschmidt45

Puoi anche provare fc comando per modificare il comando nella cronologia.

WIKI dice,

fc è un programma standard su Unix che elenca o modifica e riesegue, comandi precedentemente inseriti in una Shell interattiva. fc è un comando integrato nel bash Shell; help fc mostrerà le informazioni di utilizzo.


A parte ricerca inversa incrementale (Ctrl+R), abbiamo alcuni più bash scorciatoie:

Da man bash:

storia precedente (C-p)
 Scarica il comando precedente dall'elenco della cronologia, tornando indietro nell'elenco. 
storia successiva (C-n)
 Scarica il prossimo comando dall'elenco della cronologia, andando avanti nell'elenco. 
inizio della storia (M- <)
 Passa alla prima riga della cronologia. 
fine della storia (M->)
 Spostarsi alla fine della cronologia degli input, ovvero la linea attualmente in fase di inserimento. 
storia della ricerca inversa (C-r)
 Cerca indietro partendo dalla linea corrente e spostandosi "su" nella cronologia secondo necessità. Questa è una ricerca incrementale. 
forward-search-history (C-s)
 Cerca avanti partendo dalla riga corrente e spostando 'in basso' nella cronologia secondo necessità. Questa è una ricerca incrementale. 
cronologia di ricerca inversa non incrementale (M-p)
 Cerca all'indietro attraverso la cronologia iniziando dalla riga corrente utilizzando una ricerca non incrementale per una stringa fornita dall'utente. 
cronologia di ricerca avanzata non incrementale (M-n)
 Ricerca in avanti attraverso la cronologia utilizzando una ricerca non incrementale per una stringa fornita dall'utente. 
yank-nth-arg (M-C-y)
 Inserisci il primo argomento del comando precedente (di solito la seconda parola nella riga precedente) nel punto. Con un argomento n, inserisci l'ennesima parola dal comando precedente (le parole nel comando precedente iniziano con Word 0). Un argomento negativo inserisce l'ennesima parola dalla fine del comando precedente. Una volta calcolato l'argomento n, l'argomento viene estratto come se fosse stata specificata l'espansione della cronologia "! N". 
yank-last-arg (M-., M-_)
 Inserire l'ultimo argomento del comando precedente (l'ultima parola della voce precedente della cronologia). Con una discussione, comportati esattamente come yank-n-arg. Le chiamate successive a yank-last-arg rientrano nella cronologia, inserendo l'ultimo argomento di ogni riga a turno. Le strutture di espansione della cronologia vengono utilizzate per estrarre l'ultimo argomento, come se fosse stata specificata l'espansione della cronologia "! $". 
Shell-expand-line (M-C-e)
 Espandi la linea come fa la shell. Questo esegue l'espansione di alias e cronologia e tutte le espansioni di Shell Word. Vedi ESPANSIONE STORIA qui sotto per una descrizione dell'espansione della storia. 
history-expand-line (M- ^)
 Esegue l'espansione della cronologia sulla riga corrente. Vedi ESPANSIONE STORIA qui sotto per una descrizione dell'espansione della storia. 
insert-last-argument (M-., M-_)
 Un sinonimo di yank-last-arg. 
opera-e-arriva-dopo (C-o)
 Accetta la riga corrente per l'esecuzione e recupera la riga successiva relativa alla riga corrente dalla cronologia per la modifica. Ogni argomento è ignorato. 
comando edit-and-execute (C-xC-e)
 Richiamare un editor sulla riga di comando corrente ed eseguire il risultato come comandi Shell. 
18
!123:gs/old/new/

Eseguirà il comando 123 sostituendo la stringa "vecchio" con la stringa "nuovo".

10
John Lawrence

Puoi entrare in modalità modifica premendo M- ^ (option-shift-6 su un mac).

Digita questo:

! 123M- ^

E dovrai modificare il comando # 123. È un po 'come usare ctrl-r, ma iniziare con la sintassi del punto esclamativo.

5
James Moore

Puoi anche mettere

shopt -s histverify

nel tuo .bash_profile, che fa sì che qualsiasi espansione della cronologia appaia sulla tua riga di comando senza eseguirla, permettendoti di modificare prima di farlo. 

3
chepner

Invece di usare il comando history, associare history-search-backward/history-search-forward a scorciatoie da tastiera che possono essere facilmente memorizzate (preferisco PgUp/PgDown). Per fare ciò, inserisci questo nel tuo file .inputrc:

"<key code>":  history-search-backward
"<key code>":  history-search-forward

Per ottenere <key code>, digita Ctrl-V <key> nella Shell e sostituisci l'^[ di avvio con \e in quello che è stato prodotto.

Dopo averlo configurato, puoi semplicemente digitare some e premere PgUp per ottenere some_long_command. Se hai bisogno di some_long_command with_some_arg ma c'è un comando simile some_long_command with_some_other_arg più avanti nella cronologia, puoi scorrere fino a raggiungerlo digitando some e poi premendo ripetutamente PgUp, oppure puoi digitare some, premere PgUp, spostare il cursore su dove i due comandi inizia a differire, digita alcuni caratteri e premi PgUp ancora una volta. Questa capacità di sfogliare/differenziare rapidamente tra comandi simili rende a mio parere uno strumento molto più comodo di Ctrl-R.

3
Tgr

Si può smettere di provare "suggerire box" -come storia https://github.com/dvorka/hstr - legge la cronologia di Bash e consente una navigazione veloce.

hh

Per ottenere l'ultimo comando digita semplicemente hh, vai al comando e usa la freccia destra per scaricarlo sulla riga di comando (dove puoi modificarlo e/o aggiungere commenti).

1
Martin Dvorak

^ p per ottenere l'ultimo comando digitato in unix/solaris

0
SudhakarM

Mettere

alias r = 'fc -s'

nel tuo .bashrc (home dir) allora puoi semplicemente digitare

r <whatever>

al prompt Prompt ed eseguirai una copia dell'ultimo comando <whatever> (stessi parametri) presente nella cronologia. basta premere la freccia per vedere cosa hai eseguito se senti il ​​bisogno.

0
chuck