Salva il comando nella cronologia senza eseguirlo in bash


8

C'è un modo per salvare un comando nella cronologia di bash senza eseguirlo? per esempio

$ cmd [a long list of arguments] 

e ora durante la digitazione ricordo che mi piacerebbe fare prima qualcos'altro. Posso avere qualcosa del genere

$ cmd [a long list of arguments][some-key-strokes]

e questo in realtà non viene eseguito ma va nella storia di bash in modo che possa usarlo in seguito?


5
In quella situazione, ho semplicemente prefisso la linea con #, e quindi premo Invio.
Oliver Charlesworth

Risposte:


5

Potrebbe esserci un modo migliore, ma è possibile utilizzare il :pmodificatore di espansione della cronologia per stampare la riga di commento corrente senza eseguirla. !#è la riga corrente e %da sola non corrisponderà a nulla

$ cmd [arguments] !#%:p

freddo! ;) e senza la necessità di sfuggire a caratteri speciali nel comando cosa può diventare disordinato se il comando non è solo ls -al+1

freddo! molto pulito

8

Utilizzare l' -sopzione per il historycomando:

history -s cmd arg1 arg2

La chiamata a history -sse stessa, convenientemente, non viene aggiunta alla cronologia dei comandi, quindi nella cronologia sembra che tu abbia eseguito cmdsenza farlo.


freddo! anche questo è fantastico

1

Di solito questo è fatto da

echo 'cmd [a long list of arguments]' >> /home/you/bash_history

Nota che il nome della cronologia può differire sul tuo sistema. Pertanto è possibile utilizzare l' HISTFILEambiente var

ciò che rende:

echo 'cmd [a long list of arguments]' >> "$HISTFILE"

1

Normalmente aggiungo solo un # all'inizio della riga per trasformare la riga in un commento:

#cmd [a long list of arguments] 

Preferisco così perché puoi farlo con solo 3 [4 se ti serve MAIUSC per inserire i tasti]

^a#<ENTER>

^ a va all'inizio della riga corrente

# aggiunge il commento

ENTER esegue il commento


0

In quella situazione, ho semplicemente prefisso la linea con #, quindi ho premuto Invio.

... o usa la combinazione di tasti: ESC #

bind -p | grep -i 'insert-comment'   # "\e#": insert-comment

Vedi anche: Bash - salva il comando senza eseguirlo


0

Puoi provare ad aggiungere uno spazio e | (pipe) alla fine della riga, premendo invio, quindi Ctrl-C'ing.

( Space, |, Enter, Ctrl+ C)

Il comando sarà nella tua cronologia con un | alla fine (può semplicemente rimuovere con backspace) anziché un # all'inizio (potenzialmente più noioso da rimuovere).

NOTA BENE: non so se funziona sempre! Utilizzare a proprio rischio!

$ cmd [elenco di argomenti lunghi] |

> Ctrl+C

$ Up

$ cmd [elenco di argomenti lunghi] |


0

Puoi provare a usare questa linea:

history -s -p $COMMAND

Da help:

The -p option means to perform
history expansion on each ARG and display the result,

Ciò significa che puoi espandere cose come !!e archiviare il risultato in fondo alla cronologia.


history -sè stato dato in una risposta due anni fa. Il -pmiglioramento su questo? Cosa fa -p? (Nella misura in cui ha senso farlo, dovresti modificare la tua risposta per renderla migliore, e non rispondere al mio commento con un altro commento.)
G-Man dice 'Reinstate Monica'

0

Un'altra opzione è quella di andare all'inizio della riga e fare la cosa che stavi per fare seguita da &&, come

rm old_file && cmd [args]

Quindi, se la cosa che volevi fare ha successo, il tuo comando verrà eseguito immediatamente dopo, e se fallisce il tuo comando non verrà eseguito, ma sarà nella cronologia. Potresti anche fare

test && cmd [args]

Poiché il test senza args fallirà, ma questa è una manciata di sequenze di tasti extra rispetto al #metodo.


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.