Como fecho um terminal sem salvar o histórico?

33

Mais de uma vez, acidentalmente, executei vários comandos e poluí meu histórico do bash. Como fecho meu terminal sem salvar meu histórico do bash? Estou usando o Fedora.

Michael Mrozek
fonte

Respostas:

25

O histórico do seu shell é salvo no arquivo indicado pela HISTFILEvariável Tão:

unset HISTFILE

Isso também se aplica ao zsh, mas não ao ksh, que continua salvando no arquivo indicado por $HISTFILEquando o shell é iniciado (e, inversamente, você decide salvar seu histórico no ksh depois de iniciar o shell).

Gilles 'SO- parar de ser mau'
fonte
Posso usar isso antes de sair depois de poluir o histórico? e seu ust para esta sessão? não preciso da set HISTFILEpróxima vez que fizer login? (apenas dizer se isso é correto ou incorreto)
@ acidzombie24 Correto, as alterações nas variáveis ​​de ambiente não são salvas nas sessões, a menos que você armazene as alterações explicitamente, por exemplo, nos arquivos rc.
jw013
31

Resposta curta:

Digite isso no prompt:

$ kill -9 $$

Isso matará seu shell imediatamente, sem que ele possa fazer algo como interceptar o sinal, salvar histórico, executar ~/.bash_logout, alertar sobre trabalhos interrompidos ou qualquer coisa boa.

Resposta longa:

Nota: Essas opções não são mutuamente exclusivas; eles podem ser usados ​​de uma só vez.

Opção 1:

Se você é um perfeccionista quando se trata de bagunçar seu arquivo de histórico, o que você pode fazer é modificar a HISTIGNOREvariável para incluir vários comandos que você não deseja gravar. Por exemplo, se você adicionar HISTIGNORE='ls*:cd*'à sua ~/.bashrcinstância, qualquer instância lse cdnão será inserida no seu arquivo de histórico.

Opção 2:

Se você deseja controlar, comando por comando, quais comandos são deixados de fora do seu histórico, é possível definir HISTCONTROL='ignorespace'quais omitirão as linhas de comando que começam com um espaço. O uso ignorebothtambém omitirá as linhas repetidas. Em seguida, pressionar a barra de espaço antes de inserir um comando fará com que ele não seja exibido no seu arquivo de histórico.

Opção 3:

Se você quiser fazê-lo assim que fechar o terminal, o shell sai imediatamente, você pode trapsinalizar que o programa do terminal envia o shell ( xtermpor exemplo, envia SIGHUPe aguarda a saída do shell) e sair sem salvar o histórico quando recebe este sinal. Adicione isso ao seu ~/.bashrc:

# don't record history when the window is closed
trap 'unset HISTFILE; exit' SIGHUP
anfetamaquina
fonte
2
+1 para o método 'kill -9 $$'. Essa é certamente uma maneira de contornar situações em que HISTIGNORE, etc, são definidos como somente leitura.
Corey Henderson #
7
Não acho que seja uma boa ideia promover o uso kill -9para qualquer coisa, exceto situações terríveis em que tudo mais falhou.
Christoffer Hammarström
1
Enviar SIGKILL nunca é uma boa ideia como procedimento operacional padrão. Use os procedimentos adequados, como desarmar HISTFILE.
Arcege
@Arcege TMTOWTDI.
Amphetamachine
Eu queria saber o contrário - infelizmente, como matar o bash, certificando-se de que ele salvará sua história - e isso respondeu à minha pergunta, obrigado.
mveroone
3

Estou surpreso ao ver que ninguém sugeriu history -cimediatamente antes exit. IINM (não sou especialista) que fará bem.

msh210
fonte
2
Você está no caminho certo: history -rirá reler o arquivo do histórico, para que o salvamento se torne um não operacional.
Simon Richter
Liberar a história é um mau hábito ... o histórico da shell contém muitas informações úteis sobre quem fez o quê. é muito útil para pessoas que são novas em suas plataformas (a menos que você está 100% confiante sobre você documentação, gestão de mudança)
Franklin Piat
2

Existem duas variáveis ​​de ambiente que o bash usa para determinar o arquivo de histórico e quantas linhas gravar nele quando o shell sair.

Você pode jogar fora o histórico da sua sessão com um destes (definido durante a sessão que deseja omitir do seu arquivo de histórico):

HISTFILE=/dev/null

ou

HISTSIZE=0

Qualquer um desses funciona bem no Bash no Fedora

Eli Heady
fonte
1

Não sei por que você se importa tanto com seu histórico de comandos. Se você precisar de determinados comandos com frequência, poderá se divertir mais se definir aliases para eles, para recuperá-los com duas teclas pressionadas, em vez de precisar procurá-los no histórico.

Simon Richter
fonte
0
  1. Eli já deu a resposta correta para o Bash, que deve ser definida HISTSIZE=0.

  2. Eu apenas adicionaria o método para fazê-lo na tela GNU . Pressione Ctrl+A(sequência de escape da tela) seguida por :scrollback 0. Isso excluirá o histórico de rolagem para trás. Agora você pode fazer imediatamente :scrollback 15000para redefinir o tamanho do buffer de rolagem para trás.

gsbabil
fonte
Quando o OP disse que estava usando screen(1)?
Amphetamachine
Ele não fez. Porém, você pode estar executando o Bash dentro de uma sessão de tela e HISTSIZE = 0 ainda deixará os detalhes da sua atividade no buffer de rolagem da tela. Então, se você realmente quer limpá-lo, também precisa fazê-lo scrollback=0.
gsbabil
O buffer de rolagem é limpo quando a janela é fechada (ou seja, quando o shell sai). E se você digitar Ctrl-a H? Isso matará o arquivo de log?
Amphetamachine
@ amphetamachine: não, ele apenas começará / encerrará o registro da janela atual. Neighther Ctrl+a Hnem Ctrl+a :clearirá remover história. Você precisa Ctrl+a :scrollback 0. Você pode testar você mesmo. Inicie uma nova sessão de tela. Agora faça um cat /etc/passwd. Agora, execute um dos procedimentos acima - Ctrl+a Hou Ctrl+a :clear. Agora, tente copiar do buffer de tela, donig a Ctrl+a [seguido pela seta para cima para subir e ver até onde você pode copiar. Se você fez um Ctrl+a :scrollbackseguido de a clear, você iria apenas até onde pode ver na janela atual, pois não haverá buffer de rolagem.
precisa saber é o seguinte