Onde o histórico do bash é armazenado?

79

Se eu executar history , posso ver meus últimos comandos executados.

Mas se eu fizer tail -f $HISTFILE ou tail -f ~/.bash_history , eles não serão listados.

O arquivo é bloqueado, existe um local temporário ou algo semelhante?

    
por Adionditsak 18.07.2014 / 10:43

4 respostas

98

O Bash mantém a lista de comandos internamente na memória enquanto está em execução. Eles estão escritos em .bash_history na saída :

When an interactive shell exits, the last $HISTSIZE lines are copied from the history list to the file named by $HISTFILE

Se você quiser forçar a gravação do histórico de comandos, você pode usar o Comando history -a , que irá:

Append the new history lines (history lines entered since the beginning of the current Bash session) to the history file.

Existe também uma opção -w :

Write out the current history to the history file.

que pode ser mais adequado para você, dependendo de como você usa seu histórico.

Se você quer ter certeza de que eles estão sempre escritos imediatamente, você pode colocar esse comando em sua variável PROMPT_COMMAND :

export PROMPT_COMMAND='history -a'
    
por 18.07.2014 / 10:50
10

o bash o mantém na memória de trabalho, o bash pode ser configurado para salvá-lo quando o bash é fechado ou após cada comando e para ser carregado quando o bash é iniciado ou sob solicitação.

Se você configurar para salvar após cada comando, considere as implicações de ter várias execuções bash ao mesmo tempo. (linhas de comando serão intercaladas)

    
por 18.07.2014 / 10:48
10

(Não é uma resposta, mas não posso adicionar comentários)

Se você está verificando .bash_history porque você quer apenas excluir um comando específico (por exemplo, contendo uma senha em desmarcar), você pode excluir diretamente a entrada na memória por history -d <entry_id> .

Por exemplo, supondo uma saída como:

$ history
926  ll
927  cd ..
928  export --password=super_secret
929  ll

e você quer limpar a linha export , você pode simplesmente conseguir:

history -d 928
    
por 31.01.2016 / 20:00
4

Os comandos são salvos na memória (RAM) enquanto sua sessão está ativa. Assim que você fechar o shell, a lista de comandos será gravada em .bash_history antes do desligamento.

Assim, você não verá o histórico da sessão atual em .bash_history .

    
por 18.07.2014 / 13:30