Alguma confusão sobre o mecanismo de trabalho de ~ / .bash_history

1

Estou confuso sobre o conteúdo em ~ / .bash_history quando trabalhei em vários terminais. Como funciona para salvar o histórico em diferentes terminais?

    
por Lee 23.09.2015 / 18:36

1 resposta

3

Por padrão, o arquivo de histórico é lido apenas ao inicializar e é gravado somente ao sair. Como resultado, se você inicializar vários shells ao mesmo tempo, somente o histórico do último a sair será preservado. O histórico gerado a partir do resto será sobrescrito.

Existem algumas maneiras de ajustar esse comportamento. Uma é adicionando shopt -s histappend ao seu .bashrc. Esta opção fará com que o arquivo de histórico seja anexado ao invés de sobrescrito na saída do shell.

Você pode ajustar ainda mais esse comportamento fazendo o bash executar um acréscimo após cada comando, adicionando o seguinte à sua variável de ambiente PROMPT_COMMAND em .bashrc : export PROMPT_COMMAND="history -a;" . Isso faz com que o comando history -a seja executado toda vez que um prompt for impresso.

Ao usar os dois ajustes acima, o arquivo do histórico bash será continuamente anexado a cada um dos seus shells, não importa quantos estejam abertos. A única ressalva é que cada uma dessas shells não verá os comandos executados pelas outras shells, já que o arquivo de histórico é lido apenas na inicialização. Você pode tentar ler manualmente essas entradas no histórico atual de shells chamando history -n , mas eu já vi algumas esquisitices ao fazer isso com vários shells constantemente anexando. Pise com cuidado se você tentar automatizar isso e se importar profundamente com sua história.

    
por 23.09.2015 / 19:11