Come impedire a Bash di modificare la cronologia?


26

Se premo le frecce Su o Giù sulla mia tastiera e poi modifico qualcosa della mia cronologia, è cambiato per sempre. Anche se premo Ctrl-C e poi provo a visualizzarlo di nuovo, è ancora cambiato: ho perso quella voce nella mia cronologia.

Come posso evitare che ciò accada?


3
Adoro il titolo di questa domanda. Puoi davvero cambiare la storia e ti lamenti? Cosa c'è che non va in te ?!
Daniel Beck

@Daniel: Lol, sì ... Voglio dire, è come se stessi cambiando il mio passato. Chiaramente senza senso, e diventa ridicolmente fastidioso dopo un po '. : \
Mehrdad,

A proposito, se invece usi history-search-xxx , il comportamento è diverso. Forse è qualcosa per te?
Daniel Beck

@Daniel: è davvero utile, grazie mille. Tuttavia, mi piacerebbe conoscere la risposta a questa domanda, perché a volte i comandi non si assomigliano molto tra loro e non funziona.
Mehrdad,

la ricerca della cronologia con un prompt vuoto funziona esattamente come la cronologia precedente / successiva, ovvero la visualizzazione di tutte le voci.
Daniel Beck

Risposte:


17

Vuoi l'impostazione readline:

set revert-all-at-newline on

Puoi metterlo ~/.inputrc(vedi nota sotto) o inserire il bind 'revert-all-at-newline on'tuo ~/.bashrc.

demo:

$ man bash
$ bind 'set revert-all-at-newline on'
$ man bsh # up arrow and edit
No manual entry for bsh
$ man bash # three up arrows

Ulteriori dettagli sono disponibili nella manpage di Bash :

revert-all-at-newline

Se impostato su ' on', Readline annullerà tutte le modifiche alle righe della cronologia prima di tornare quando viene eseguita la linea di accettazione. Per impostazione predefinita, le righe della cronologia possono essere modificate e conservare singoli elenchi di annullamenti tra le chiamate alla readline. L'impostazione predefinita è ' off'.


Nota:

Se ~/.inputrcviene creato un nuovo file ai fini dell'impostazione revert-all-at-newline, tenere presente che bash utilizzerà le impostazioni readline in questo file anziché tutte le impostazioni che potrebbero essere presenti nel file /etc/inputrc. Cioè, tutte le impostazioni specificate in /etc/inputrcnon saranno più attive. Pertanto, se il /etc/inputrcfile esiste, è una buona idea iniziare ~/.inputrccon la riga:

$include /etc/inputrc


Sei fantastico, è esattamente quello di cui ho bisogno. Non voglio più colpire il mio monitor. : D +1000000 (Vorrei)
Mehrdad,

5

Io entro:

ls /tmp

- meraviglioso. Ora non voglio entrare

ls /temp 

e può impedirgli di entrare nella cronologia, quindi impedirgli di sovrascrivere ls / tmp, se avvio il comando con uno spazio:

 ls /temp

È difficile da vedere, ma se lo sai ...

È controllato da

export HISTCONTROL=ignoredups
export HISTCONTROL=ignoreboth

ignoredups ignora solo i comandi duplicati, ignoreboth ignora gli spazi all'inizio della riga, il che è utile, per nascondere password altrimenti nascoste.

Ma forse sei alla ricerca di una soluzione, dove finisci con entrambi i comandi, quello vecchio non modificato e quello nuovo. La mia versione di bash o le impostazioni si comportano così, ma non so cosa sia diverso dal tuo.


ha; Ho sempre pensato che non fosse un bug salvare i comandi con uno spazio iniziale. Grazie. :)
sarnold,
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.