Risposte:
Se si desidera eseguire un comando senza salvarlo nella cronologia, anteprimerlo con uno spazio aggiuntivo
prompt$ echo saved
prompt$ echo not saved \
> # ^ extra space
Perché questo funzioni è necessario uno ignorespace
o ignoreboth
dentro HISTCONTROL
. Ad esempio, esegui
HISTCONTROL=ignorespace
Per rendere persistente questa impostazione, inseriscila nel tuo .bashrc
.
Se hai già eseguito il comando e desideri rimuoverlo dalla cronologia, utilizza prima
history
per visualizzare l'elenco dei comandi nella cronologia. Trova il numero accanto a quello che desideri eliminare (ad es. 1234) ed esegui
history -d 1234
Inoltre, se la riga che desideri eliminare è già stata scritta nel tuo $ HISTFILE (che di solito accade quando finisci una sessione di default), dovrai riscrivere in $ HISTFILE, o la riga riapparirà quando apri un nuovo sessione:
history -w
history -a
, in quel caso è già scritto nel file della cronologia, piuttosto che all'uscita in configurazione normale. In particolare: mywiki.wooledge.org/BashFAQ/088
history -w
. Altrimenti quando esci, la linea eliminata è ancora lì!
history -w
after history -d {num}
era esattamente ciò di cui avevo bisogno: aggiungere tidbit critico alla risposta, altrimenti un utente potrebbe pensare che un'eliminazione temporanea dalla shell corrente sia effettivamente permanente.
history -w
è necessario per le voci che sono già state scritte nel .bash_history
file. Come riprodurre (ad es. Su CentOS 7 con configurazione stock): 1. accedi 2. inserisci il comando echo foo
3. disconnetti 4. accedi di nuovo 5. cancella la voce per echo foo
6. disconnetti 7. accedi ancora: la voce è ancora lì. A seconda di come si configura la cronologia di bash, forse è possibile riprodurre questo problema in altri modi, ad esempio se si provoca la scrittura della cronologia prima della disconnessione.
Per cancellare tutta la cronologia, utilizzare
history -c
Per eliminare una singola riga, utilizzare
history -d linenumber
Ho questo nel mio ~/.bashrc
, che rende il comando $ forget
cancella il comando precedente dalla storia
function forget() {
history -d $(expr $(history | tail -n 1 | grep -oP '^ \d+') - 1);
}
history -d $( history | tail -n 1 | cut -f 1 -d " " )
sarebbe più semplice?
history | tail -n1
è il history
comando stesso, quindi l'eliminazione di quel numero ottiene la voce errata. Tuttavia, history -d $( history | awk 'END{print $1-1}' )
combina la selezione della linea, la selezione del campo e la sottrazione.
Se vuoi dimenticare l'intera sessione di bash, puoi eseguire kill
l'attuale processo di bash. Poiché la variabile $$
contiene la pid
shell corrente, puoi fare:
kill -9 $$
È necessario scrivere le modifiche dopo aver cancellato la cronologia. E se non desideri avere il comando di cancellazione della cronologia nella cronologia, devi eseguire il comando in questo modo:
history -c && history -w && logout
In bocca al lupo.
Adding another point suppose if you want to delete a range of history lines
You can use below script.
Below example will delete history output from line 1 to line 150.
for i in `history | awk 'NR > 1 && NR <=150{print $1}'`; do history -d $i; done