Como o comando history funciona?

8

Quando digito qualquer comando no terminal, ele não aparece no meu ~/.bash_historyarquivo até sair da minha sessão.

Além disso, quando edito meu ~/.bash_historyarquivo manualmente (por exemplo, removo os três últimos comandos), quando digito, historyele ainda mostra os comandos que removi do ~/.bash_historyarquivo. Somente quando eu saio da minha sessão e faço o login novamente eles desaparecem.

Como meu ~/.bash_historyarquivo e o historycomando são sincronizados?

sys0dm1n
fonte
2
está na RAM ... Onde está armazenado o histórico do bash?
Zanna 6/17
"Quando digito qualquer comando no terminal" Na verdade, não é verdade. Quando você coloca um espaço na frente do comando por padrão, ele não salva esse comando.
Rinzwind
@Rinzwind o comportamento de salvar o comando, mesmo que ele tenha um espaço à frente, pode ser alterado editando o valor da sua variável de ambiente HISTCONTROL.
sys0dm1n
@ sys0dm1n "por padrão"
Rinzwind

Respostas:

10

Quando você abre um terminal bash, ele carrega o conteúdo ~/.bash_historye constrói o histórico do shell ativo (na RAM), adicionando todos os comandos executados nesse shell a ele - e somente a ele, não ao arquivo.

Somente quando você fecha um terminal do bash, seu histórico é anexado ao seu ~/.bash_historyarquivo.


Opções de history:

history -a # save the active shell's history to ~/.bash_history (appending)
history -c # clear the active shell's history
history -d NNN # delete row NNN of the active shell's history
history -r # reload the active shell's history from ~/.bash_history (appending)
history -w # save the active shell's history to ~/.bash_history (overwriting)

Opções para ~/.bashrcarquivo

Se você deseja alterar esse comportamento para que o histórico temporário seja salvo ~/.bash_historydiretamente após a execução de um comando, adicione esta linha:

PROMPT_COMMAND="history -a"

Se você desejar adicionalmente que cada terminal carregue o ~/.bash_historyarquivo automaticamente após cada execução de comando, adicione esta linha:

PROMPT_COMMAND="history -a; history -c; history -r"

Se você deseja excluir determinados comandos (por exemplo, tudo que começa com sudoe cat), sejam salvos, adicione esta linha:

HISTIGNORE="sudo*:cat*"
sobremesa
fonte