Più di una volta ho accidentalmente eseguito una serie di comandi e inquinato la mia storia di bash. Come posso chiudere il mio terminale senza salvare la cronologia di bash? Sto usando Fedora.
Più di una volta ho accidentalmente eseguito una serie di comandi e inquinato la mia storia di bash. Come posso chiudere il mio terminale senza salvare la cronologia di bash? Sto usando Fedora.
Risposte:
La cronologia della shell viene salvata nel file indicato dalla HISTFILE
variabile. Così:
unset HISTFILE
Questo vale anche per zsh, ma non per ksh che continua a salvare nel file indicato da $HISTFILE
quando inizia la shell (e viceversa, decidi di salvare la cronologia in ksh dopo aver avviato la shell).
Risposta breve:
Digita questo al prompt:
$ kill -9 $$
Questo ucciderà immediatamente la shell senza che la shell sia in grado di fare nulla come intercettare il segnale, salvare la cronologia, eseguire ~/.bash_logout
, avvisare di lavori interrotti o di qualsiasi altra buona cosa.
Risposta lunga:
Nota: queste opzioni non si escludono a vicenda; possono essere usati tutti in una volta.
Opzione 1:
Se sei un perfezionista quando si tratta di ingombrare il file della cronologia, ciò che puoi fare è modificare la HISTIGNORE
variabile per includere globi di comandi che non desideri vengano registrati. Ad esempio, se aggiungi HISTIGNORE='ls*:cd*'
al tuo ~/.bashrc
allora qualsiasi istanza di ls
e cd
non sono inseriti nel tuo file di cronologia.
Opzione 2:
Se vuoi controllare su base comando per comando quali comandi vengono lasciati fuori dalla tua cronologia, puoi impostare HISTCONTROL='ignorespace'
quale omettere qualsiasi riga di comando che inizia con uno spazio. L'uso ignoreboth
ometterà anche le righe ripetute. Quindi, premendo la barra spaziatrice prima di immettere un comando, non verrà visualizzato nel file della cronologia.
Opzione 3:
Se vuoi solo farlo così quando chiudi il terminale la shell esce immediatamente, puoi trap
il segnale che il programma terminale invia la shell ( xterm
, ad esempio invia SIGHUP
quindi attende che la shell esca) e fare l'uscita senza salvare la cronologia quando riceve questo segnale. Aggiungi questo al tuo ~/.bashrc
:
# don't record history when the window is closed
trap 'unset HISTFILE; exit' SIGHUP
kill -9
per qualsiasi cosa, tranne situazioni terribili, quando tutto il resto ha fallito.
Sono sorpreso di vedere nessuno ha suggerito history -c
immediatamente prima exit
. IINM (non sono un esperto) che andrà bene.
history -r
rileggere il file della cronologia, quindi il salvataggio diventa no-op.
Esistono due variabili d'ambiente che bash usa per determinare il file di cronologia e quante righe scrivere su di esso quando la shell esce.
Puoi eliminare la cronologia della sessione con uno di questi (impostato durante la sessione che desideri omettere dal file della cronologia):
HISTFILE=/dev/null
o
HISTSIZE=0
Entrambi funzionano bene in Bash su Fedora
Non so perché ti preoccupi così tanto della cronologia dei tuoi comandi. Se hai spesso bisogno di determinati comandi, potresti divertirti di più se definisci gli alias per loro in modo da poterli recuperare con due sequenze di tasti invece di doverli cercare nella cronologia.
Eli ti ha già dato la risposta corretta per Bash che deve essere impostata HISTSIZE=0
.
Vorrei solo aggiungere il metodo per farlo per lo schermo GNU . Premere Ctrl+A
(sequenza di escape dello schermo) seguito da :scrollback 0
. Ciò eliminerà la cronologia di scorrimento indietro. Ora puoi immediatamente fare :scrollback 15000
per ripristinare la dimensione del buffer di scorrimento indietro.
screen(1)
?
scrollback=0
anche tu .
Ctrl+a H
né Ctrl+a :clear
rimuoverà la storia. Hai bisogno Ctrl+a :scrollback 0
. Puoi provarlo tu stesso. Inizia una nuova schermata. Ora fai un cat /etc/passwd
. Ora, esegui una delle operazioni precedenti Ctrl+a H
o Ctrl+a :clear
. Ora, prova a copiare dal buffer dello schermo donig a Ctrl+a [
seguito da una freccia su per salire e vedere fino a che punto puoi andare a copiare. Se hai Ctrl+a :scrollback
seguito a seguito di a clear
, andresti solo per quanto puoi vedere nella finestra corrente poiché non ci sarà alcun buffer di scorrimento.
set HISTFILE
accedere la prossima volta? (dì solo se è corretto o errato)