Escludendo alcuni dei comandi dal salvataggio nella cronologia di bash


31

C'è un modo per escludere comandi come rm -rf, svn revertdall'essere archiviati nella cronologia di bash? In realtà, per errore, li ho emessi un numero di volte anche se non ho intenzione di farlo, solo perché sto facendo le cose velocemente ed è successo. Da qui deriva la perdita di molto lavoro che ho svolto finora.


3
Potresti essere interessato a serverfault.com/questions/48769/…
Luc M

Risposte:


53

È possibile che si desideri $HISTIGNORE: "Un elenco separato da due punti di modelli utilizzati per decidere quali righe di comando devono essere salvate nell'elenco della cronologia." Questa riga nel tuo ~ / .bashrc dovrebbe fare il lavoro:

HISTIGNORE='rm *:svn revert*'

Inoltre, è possibile aggiungere uno spazio all'inizio di un comando per escluderlo dalla cronologia. Funziona fintanto che $HISTCONTROLcontiene ignorespaceo ignoreboth, che è predefinito su qualsiasi distribuzione che ho usato.


4
lo spazio è come l'ho sempre fatto.
Rob,

Prima inserivo accidentalmente altri elementi y, dopo tutto cp(aliasing cp -i). Quindi ho detto ycome alias y='$(history | awk '"'"'END{if(NF==2 && $2=="y"){print "history -d " $1}}'"'"')'... Ma HISTIGNOREè un metodo migliore come sembra. :) Grazie.
anishsane,

2
Giusto per essere più esplicito: puoi aggiungere export HISTCONTROL="ignorespace"al tuo ~/.bashrcper ignorare i comandi che iniziano con gli spazi.
Aidan Feldman,

@AidanFeldman non predefinito su macOS
akauppi

NOTA: lo spazio deve essere incluso quando si digita nella riga di comando e non in HISTIGNORE.
Gayan Weerakutti,

6

Sebbene vada leggermente diverso dalla domanda di OP, quando non voglio intenzionalmente un comando per essere memorizzato nella cronologia di bash, li prefisso con uno spazio. Funziona con Ubuntu e le sue varianti, non sono sicuro che funzioni su tutti i sistemi.


6
Dipende da $HISTCONTROL(vedi la mia risposta).
l0b0,

@ l0b0 giusto, grazie per averlo sottolineato.
k4rtik,

1

Di solito uccido la mia istanza bash quando ho fatto cose che non voglio nella storia.

kill -9 $$

$$ rappresenta il processo corrente - bash quando lo si esegue dalla shell. Puoi usare $ BASHPID, ma è più digitando :-)


2
Alcune impostazioni di Bash (come questa ) salveranno la cronologia dopo ogni comando, e in tal caso non funzionerà.
l0b0,

1
Prima lo facevo. ma l'impostazione HISTFILE=/dev/nullè un'opzione migliore.
anishsane,

HISTFILE=funziona semplicemente sia in bash che in ksh.
kubanczyk,

oppureunset HISTFILE
Todd Walton,
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.