C'è un modo per annullare una modifica della cronologia di bash?


9

Premendo su, posso passare attraverso i comandi precedentemente inseriti. Ho notato però che se modifico uno di essi, ciò altera la storia. Ad esempio, se digito:

echo a
echo b
echo c
[up][up][backspace]d[ctrl+c]

la storia ora mostra che il secondo comando era echo dno echo b. Come mantengo il primo echo bnella storia?

Ad esempio, supponiamo di eseguire un comando molto lungo, con molte opzioni. quindi voglio eseguirlo di nuovo, con una piccola modifica, quindi torno indietro nella storia per trovarlo, apportare la modifica, ma poi mi rendo conto che in realtà non ho bisogno di rieseguirlo, avendo appena pensato a un'altra opzione da fare invece. poi, voglio tornare indietro e ricordare a me stesso quale sia stato il comando che ho eseguito - ma aspetta, la storia ora mostra la cosa sbagliata!

Questo accade molto raramente, ma quando lo trovo lo trovo davvero irritante. C'è un modo per preservare automaticamente la storia originale?


1
con historyte puoi vedere tutti i comandi. Dopo puoi selezionare quello che ti serve. Quale shell stai usando ora?
Hastur,

6
Non riesco a riprodurlo. Se cambio c in d, premi CTRL + C e premi di nuovo [su], dice ancora echo c.
Martin von Wittich,

Risposte:


6

Prova a inserire il tuo ~/.inputrc

 set revert-all-at-newline on

In alcuni casi puoi trovarlo nel valore predefinito (Off).
Dovrebbe forzare readlinel'annullamento di tutte le modifiche alle righe della cronologia prima di tornare quando accept-lineviene eseguito. (maggiori informazioni in man bash).

Modifica:
CTRL+c e set revert-all-at-newline onfunziona bene da allora bash-4.3.30.

# GNU bash, version 4.3.30(1)-release
# Emacs-mode

echo c
[up][backspace]d[Ctrl+c][up] # you should see echo c

Ma:

echo c
[up][backspace]d[down][Ctrl+r]echo[Ctrl+j][Ctrl+c][up] # you should see echo d

Bene, questa è la soluzione migliore. È interessante notare che CTRL-c farà effettivamente ricordare il valore modificato, anche se la cancellazione completa della linea o la freccia verso il basso e quindi premendo Invio o eseguendo un altro comando ripristinano la cronologia.
Decano Serenevy,

@DeanSerenevy: Grazie Anche a me piace la tua soluzione alternativa e comincio a usare anche CTRL-a nano:-)
Hastur,

4

Generalmente:

CTRL-a # ENTER

lo farà.

Il comando originale verrà ricordato se si esegue il comando modificato. Naturalmente, non si desidera eseguire effettivamente, quindi è possibile commentare la riga con #.

Nel tuo esempio, si dovrebbe quindi avere nella vostra storia: echo a, echo b, echo c, # echo d.


1
Puoi premere alt-shift-3per commentare l'attuale riga di comando se il tuo bash sta usando readline. /insert-commenttra man 3 readline(o man bash) per maggiori informazioni.
cychoi,
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.