Suspender temporariamente o bash_history em um determinado shell?

85

Existe uma maneira de suspender temporariamente o acompanhamento de histórico no bash para inserir uma espécie de modo "incógnito"? Estou inserindo coisas no meu terminal que não quero informações financeiras confidenciais gravadas.

    
por Naftuli Kay 08.04.2011 / 21:51

6 respostas

115

Isso deve ser o que você está procurando:

unset HISTFILE

De man bash

If HISTFILE is unset, or if the history file is unwritable, the history is not saved.

Como alternativa, se você quiser desativá-lo e ativá-lo novamente, talvez seja mais fácil usar set :

Desativar

set +o history

Ativar

set -o history
    
por 08.04.2011 / 21:53
26

Usando bash, defina HISTCONTROL="ignorespace" e preceda com espaço qualquer comando que você não deseja que seja gravado no histórico. Caso você tenha esquecido de tomar alguma medida, também há history -d <number> para excluir uma entrada específica ou history -c para limpar todo o histórico de comandos.

    
por 08.04.2011 / 21:59
19

Certifique-se de que HISTCONTROL contenha ignorespace . Você provavelmente desejará adicionar HISTCONTROL=ignorespace (ou HISTCONTROL=ignoredups:ignorespace ou algo assim) ao seu ~/.bashrc . Então, qualquer linha de comando que comece com um espaço é omitida do histórico.

Outra possibilidade é iniciar uma nova sessão de bash que não salve seu histórico.

$ bash
$ unset HISTFILE
$ sooper-sekret-command
$ exit
$ #back in the parent shell
    
por 08.04.2011 / 22:05
3

Existe uma maneira simples de desativar o histórico, portanto, os comandos não serão armazenados no arquivo .bash_history .

Você precisa colocar o espaço em branco ou a tabulação na frente de qualquer comando, para que o comando não seja armazenado no histórico. Por exemplo:

$ ls 
print the list of file 
$ history 
ls
history

$  pwd
print the current  working directory 
$ history 
ls
history

O comando pwd não será armazenado no histórico porque possui espaço em branco na frente.

    
por 27.05.2014 / 10:57
2

Se você precisar evitar armazenar vários comandos e ainda quiser usar a seta para cima para acessar os comandos anteriores, use:

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

Existem quatro formas (níveis) para controlar como os comandos são armazenados.

  1. O primeiro e mais simples é usar ignorespace (ou ignoreboth):

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

    Isso permitirá usar um espaço antes dos comandos que você deseja evitar ser gravado na lista de memória de history . E, em conseqüência, como não há nenhum comando gravado na memória que possa ser enviado para o arquivo, também evitará que um comando one seja enviado para o arquivo listado em $HISFILE .

  2. Evite gravar comandos no arquivo em $HISTFILE :

    $ unset HISTFILE
    

    If unset, the command history is not saved when a shell exits.

    Nulo HISTFILE='' e / ou definido como HISTFILE=/dev/null funciona com o mesmo efeito. Entenda que os comandos ainda estão sendo gravados na lista de memórias, tente o comando history ou a seta para cima.

    Atenção: se o HISTFILE for resetado antes do shell existir, todo o que foi gravado na memória pode ser gravado no arquivo de qualquer maneira.

  3. Evite gravar novos comandos na lista de histórico na memória. E, como não estando na memória, não pode ser gravado para arquivo.

    $ shopt -ou history              # or set +o history
    

    Reabilite com shopt -os history (ou set -o history )

  4. Remova todos os comandos da lista de histórico na memória:

    $ HISTSIZE=0
    

    Todos os comandos são apagados (da memória) e, portanto, nada pode ser armazenado no arquivo, é claro, até que a variável seja definida novamente para algum valor numérico válido.

por 29.08.2018 / 02:11
1
export HISTFILE=/dev/null 

Esse é o meu caminho direto. Apenas no caso de unset HISTORY / HISTFILE / HISTCONTROL, etc não funcionarem, exportá-lo para / dev / null sempre funcionou para mim.

    
por 28.08.2018 / 20:31