Sospendere temporaneamente bash_history su una determinata shell?


116

C'è un modo per sospendere temporaneamente il tracciamento della cronologia in bash, in modo da entrare in una sorta di modalità "in incognito"? Sto inserendo cose nel mio terminale che non voglio informazioni finanziarie sensibili registrate.

Risposte:


153

Questo dovrebbe essere quello che stai cercando:

unset HISTFILE

A partire dal man bash

Se HISTFILE non è impostato o se il file della cronologia non è scrivibile, la cronologia non viene salvata.

In alternativa, se si desidera disattivarlo e riaccenderlo, potrebbe essere più facile da usare set:

Spegni

set +o history

Accendere

set -o history

12
Il valore di HISTFILEviene verificato solo all'uscita da bash, quindi il primo metodo non funziona così com'è (se si ripristina il valore, il comando verrà salvato). set +o historyfunziona come indicato.
Gilles,

6
Grazie eccellente Userò set +o historye set -o historyper spostarsi avanti e indietro quando sto facendo cose segreto;)
Naftuli Kay

1
unset HISTFILEnon funziona. set -/+o historyfunziona come un fascino! grazie
kholofelo Maloma,

4
Come suggerimento, se si inserisce uno spazio prima del comando (avviare il comando con uno spazio), questo non verrà registrato nella cronologia e neanche i tasti freccia su / giù lo mostreranno.
Mahdi,

1
Questo non funzionerà in zsh btw
Shubham Chaudhary,

33

Usando bash, imposta HISTCONTROL="ignorespace"e precede con spazio qualsiasi comando che non desideri venga registrato nella cronologia. Nel caso in cui ti sei dimenticato di prendere qualsiasi misura, c'è anche history -d <number>per cancellare una voce specifica o history -cper cancellare l'intera cronologia dei comandi.


27

Assicurarsi che HISTCONTROLcontenga ignorespace. Probabilmente vorrai aggiungere HISTCONTROL=ignorespace( HISTCONTROL=ignoredups:ignorespaceo qualcosa del genere) al tuo ~/.bashrc. Quindi qualsiasi riga di comando che inizia con uno spazio viene omessa dalla cronologia.

Un'altra possibilità è quella di iniziare una nuova sessione bash che non salva la sua cronologia.

$ bash
$ unset HISTFILE
$ sooper-sekret-command
$ exit
$ #back in the parent shell

5

Se è necessario evitare di memorizzare diversi comandi e si desidera comunque utilizzare la freccia su per accedere ai comandi precedenti, utilizzare:

$ bash                        # open a new session.
$ unset HISTFILE              # avoid recording commands to file.
$ commands not recorded
.
.
$ exit
$

Esistono quattro modi (livelli) per controllare la modalità di memorizzazione dei comandi.

  1. Il primo e più semplice è usare ignorespace(o ignorare entrambi):

    $ HISTCONTROL="ignorespace${HISTCONTROL:+:$HISTCONTROL}"

    Ciò consentirà di utilizzare uno spazio prima dei comandi che si desidera evitare di essere registrati nell'elenco di memoria di history. E, di conseguenza, poiché non esiste alcun comando registrato in memoria che possa essere inviato al file, si eviterà anche un comando da inviare al file elencato in $HISFILE.

  2. Evitare di registrare i comandi nel file in $HISTFILE:

    $ unset HISTFILE

    Se non impostato, la cronologia dei comandi non viene salvata all'uscita da una shell.

    Null HISTFILE=''e / o impostato su HISTFILE=/dev/nullfunziona con lo stesso effetto. Comprendi che i comandi sono ancora registrati nell'elenco di memoria, prova il historycomando o la freccia su.

    Avvertenza: se HISTFILE viene ripristinato prima dell'esistenza della shell, tutto ciò che è stato registrato in memoria potrebbe comunque essere scritto nel file.

  3. Evitare di registrare nuovi comandi nell'elenco cronologico in memoria. E, poiché non è in memoria, non può essere registrato su file.

    $ shopt -ou history              # or set +o history

    Riattivare con shopt -os history(o set -o history)

  4. Rimuovere tutti i comandi dall'elenco cronologico in memoria:

    $ HISTSIZE=0

    Tutti i comandi vengono cancellati (dalla memoria) e quindi nulla può essere archiviato nel file, ovviamente, fino a quando la variabile non viene reimpostata su un valore numerico valido.


//, copre tutte le risposte tranne la risposta di @Ambrose in una comoda pagina. Ben fatto, @Isaac. Saresti disposto ad aggiungere un collegamento o due ai documenti per questo? Abbastanza sicuro man historynon lo taglierà per la maggior parte di noi.
Nathan Basanese,

1
@NathanBasanese Expanded. Meglio?
Isaac,

// , Sì! Sarei corretto supponendo che questi provengano dalle variabili Bash e dai documenti integrati di Shopt ?
Nathan Basanese,

// Inoltre, mentre leggevo la documentazione di Bash Variables , mi sono imbattuto HISTIGNORE, di cui subsumesla funzione HISTCONTROL.
Nathan Basanese,

(Supponendo che tu stia usando Linux): cosa succede se esegui il comando LESS=+'/^ *HISTI' man bash(non sono le "pagine del manuale"?). @NathanBasanese
Isaac,

3

C'è un modo semplice per disattivare la cronologia, quindi i comandi non verranno memorizzati nel .bash_historyfile.

Devi mettere lo spazio bianco o tab davanti a qualsiasi comando, in modo che quel comando non venga memorizzato nella cronologia. Per esempio:

$ ls 
print the list of file 
$ history 
ls
history

$  pwd
print the current  working directory 
$ history 
ls
history

Il pwdcomando non verrà archiviato nella cronologia, poiché ha spazi bianchi nella parte anteriore.


Questo non funziona; Bash si lamenta che "-" o "-storia" o altri comandi sillabati non sono stati trovati.
Samuel A. Falvo II,

2
Questo non funzionerà a meno che HISTCONTROL = "ignorespace" sia impostato come nella risposta di forcefsck
DeveloperChris

1
export HISTFILE=/dev/null 

Questo è il mio modo di andare. Nel caso in cui il HISTORY / HISTFILE / HISTCONTROL non impostato non funzioni, esportarlo in / dev / null ha sempre funzionato per me.


Per sospendere temporaneamente la cronologia? Questo non ha funzionato per me come un normale comando. I comandi successivi sono stati registrati nella cronologia. Lo stai chiamando in .bash_profile o in uno script? GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin16)
Mat Gessel
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.