Come chiudo un terminale senza salvare la cronologia?


33

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:


25

La cronologia della shell viene salvata nel file indicato dalla HISTFILEvariabile. Così:

unset HISTFILE

Questo vale anche per zsh, ma non per ksh che continua a salvare nel file indicato da $HISTFILEquando inizia la shell (e viceversa, decidi di salvare la cronologia in ksh dopo aver avviato la shell).


Posso usarlo prima di disconnettermi dopo aver inquinato la cronologia? ed è ust per questa sessione? non ho bisogno di set HISTFILEaccedere la prossima volta? (dì solo se è corretto o errato)

@ acidzombie24 È corretto, le modifiche alle variabili di ambiente non vengono salvate tra le sessioni a meno che non vengano memorizzate in modo esplicito, ad esempio nei file rc.
jw013,

31

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 HISTIGNOREvariabile per includere globi di comandi che non desideri vengano registrati. Ad esempio, se aggiungi HISTIGNORE='ls*:cd*'al tuo ~/.bashrcallora qualsiasi istanza di lse cdnon 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 ignorebothometterà 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 trapil segnale che il programma terminale invia la shell ( xterm, ad esempio invia SIGHUPquindi 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

2
+1 per il metodo "kill -9 $$". Questo è certamente un modo per aggirare le situazioni in cui HISTIGNORE, ecc. Sono impostati come di sola lettura.
Corey Henderson,

7
Non credo sia una buona idea promuovere l'utilizzo kill -9per qualsiasi cosa, tranne situazioni terribili, quando tutto il resto ha fallito.
Christoffer Hammarström,

1
L'invio di SIGKILL non è mai una buona idea come procedura operativa standard. Utilizzare le procedure appropriate, come disinserire HISTFILE.
Arcege,

@Arcege TMTOWTDI.
anfetamachina,

Volevo sapere il contrario - ahimè come uccidere Bash assicurandomi che SALVERÀ la sua storia - e questo ha risposto alla mia domanda, grazie.
mveroone,

3

Sono sorpreso di vedere nessuno ha suggerito history -cimmediatamente prima exit. IINM (non sono un esperto) che andrà bene.


2
Sei sulla buona strada: history -rrileggere il file della cronologia, quindi il salvataggio diventa no-op.
Simon Richter,

Svuotare la storia è una cattiva abitudine ... la storia della shell contiene molte informazioni utili su chi ha fatto cosa. è molto utile per le persone che sono nuove sulle tue piattaforme (a meno che tu non sia sicuro al 100% della tua documentazione, gestione delle modifiche)
Franklin Piat

2

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


1

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.


0
  1. Eli ti ha già dato la risposta corretta per Bash che deve essere impostata HISTSIZE=0.

  2. 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 15000per ripristinare la dimensione del buffer di scorrimento indietro.


Quando l'OP ha detto che stavano usando screen(1)?
anfetamachina,

Non l'ha fatto. Tuttavia, potresti eseguire Bash all'interno di una sessione dello schermo e HISTSIZE = 0 lascerà comunque i dettagli della tua attività nel buffer di scorrimento dello schermo. Quindi, se lo vuoi davvero pulito, devi farlo scrollback=0anche tu .
gsbabil,

Il buffer di scrollback viene cancellato alla chiusura della finestra (ovvero quando esce la shell). E se hai digitato Ctrl-a H? Ucciderà il file di registro?
anfetamachina,

@amphetamachine: no, inizierà / terminerà solo la registrazione della finestra corrente. Né più Ctrl+a HCtrl+a :clearrimuoverà 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 Ho 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 :scrollbackseguito a seguito di a clear, andresti solo per quanto puoi vedere nella finestra corrente poiché non ci sarà alcun buffer di scorrimento.
gsbabil,
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.