it-swarm.it

Sospendere temporaneamente bash_history su una determinata shell?

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.

128
Naftuli Kay

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ù semplice utilizzare set :

Spegni

set +o history

Accendere

set -o history
173
SiegeX

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

33
forcefsck

Assicurati che HISTCONTROL contenga ignorespace. Probabilmente vorrai aggiungere HISTCONTROL=ignorespace (o HISTCONTROL=ignoredups:ignorespace o 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

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 ignoreboth):

    $ 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, eviterà anche il comando no da inviare al file elencato in $HISFILE.

  2. Evita di registrare comandi nel file in $HISTFILE:

    $ unset HISTFILE
    

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

    Nullo HISTFILE='' e/o impostato su HISTFILE=/dev/null funziona con lo stesso effetto. Comprendi che i comandi sono ancora registrati nell'elenco di memoria, prova il comando history o la freccia su.

    Avvertenza: se HISTFILE viene ripristinato prima che la Shell esista, tutto ciò che è stato registrato in memoria potrebbe comunque essere scritto nel file.

  3. Evita 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
    

    Riattiva 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.

6
Isaac

Esiste un modo semplice per disattivare la cronologia, quindi i comandi non verranno memorizzati in .bash_history file.

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 comando pwd non verrà archiviato nella cronologia, poiché ha spazi bianchi nella parte anteriore.

3
Kalanidhi M.
export HISTFILE=/dev/null 

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

2
Ambrose

Per aumentare ulteriormente la risposta di SiegeX e renderlo davvero in modalità di navigazione in incognito ...

Dichiarazione di non responsabilità: la roba del titolo probabilmente funzionerà su gnome-terminal. è stato testato solo in Linux Mint 19.3/Gnome Terminal 3.28.1 perché sono pigro.

Aggiungi quanto segue al tuo ~/.bash_functions (questo presuppone che tu lo stia importando tramite il tuo .bashrc/.profile eccetera):

function setGnomeTerminalTitle() {
    local NEW_TITLE="$1";
    PS1="\[\e]0;${NEW_TITLE}\a\]\${debian_chroot:+(\$debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\] \[\033[01;34m\]\w \$\[\033[00m\]";
}

Quindi aggiungi quanto segue al tuo ~/.bash_aliases (di nuovo questo presuppone che tu lo stia importando tramite il tuo .bashrc/.profile eccetera):

alias title="setGnomeTerminalTitle";
alias hist='history'
alias histoff="setGnomeTerminalTitle 'Incognito Window' && set +o history"
alias histon="setGnomeTerminalTitle \"[email protected]$HOSTNAME:\${PWD//\${HOME//\\//\\\\\\/}/\\~}\" && set -o history"

EDIT: per spiegare la roba del titolo histon - normalmente il titolo della finestra in gnome-terminal è "$ USER @ $ HOSTNAME: $ {PWD}" tranne che se sei nella tua cartella home,/home/pippo, viene visualizzato come ~; almeno è sul mio computer. questo comando utilizza sostituzioni di stringhe bash per sfuggire alle barre in $HOME così otteniamo \/home\/foo e poi a sua volta usandolo come regex per sostituire quel modello in $PWD con un letterale ~ ... e poi un mucchio di escape vengono aggiunti in cima per farlo funzionare come alias in una stringa tra virgolette doppie.

Ora quando si digita histoff si ottiene una modifica del titolo per la modalità di navigazione in incognito e la cronologia viene interrotta per quella sessione in quella finestra (la parola histoff viene ancora registrata ma nulla dopo). Se poi digiti histon ripristina il titolo e tutte le righe dopo histoff fino a e includendo la riga con histon non vengono registrate ma tutto dopo histon è registrato.

Esempio:

## this is still logged
histoff  

## this is NOT logged
echo "my password is: password";
fake_ua='If firefox and curl had a child, would it be named furl?';
curl -A "$fake_ua" https://www.itsnotap0rnsiteipromise.com/curvy-girlz/;

vi ~/Documents/maths/super-secret-squirrel/gift-ideas.txt

## this is still NOT logged
histon

## this is logged again
Sudo apt install -y kmag;

0
zpangwin