Existe uma maneira de definir um histórico ilimitado no Bash?
83
Adicione isso ao seu .bashrc
(Linux) ou .bash_profile
(MacOS):
export HISTFILESIZE=
export HISTSIZE=
Lá vai você, história ilimitada. Atualmente tenho 27000 entradas :)
De man bash
:
Se
HISTFILESIZE
não estiver definido, nenhum truncamento será executado.
Isso significa que .bash_history
nunca é truncado
Também parece que o mesmo se aplica HISTSIZE
, embora eu não tenha achado isso documentado.
Outro recurso interessante que vou tentar é o seguinte:
Se a
HISTTIMEFORMAT
variável estiver definida, os carimbos de hora serão gravados no arquivo de histórico, marcados com o caractere de comentário do histórico, para que possam ser preservados nas sessões do shell, como a seguir:
export HISTTIMEFORMAT="%F %T "
Deixe-me saber se você já tentou isso ...
gdb
; se você definir umaHISTSIZE
variável, ela será aceita como 0, desativando assim o tamanho do histórico por completo.export
,HISTFILESIZE
está em número de linhas (não bytes), e o truncamento do arquivo de histórico acontece quando você define a variávelHISTFILESIZE
(e quando o shell sai). Portanto, não configurá-lo duas vezes em seu arquivo de configuração com valores diferentes ...(republicando minha resposta em https://stackoverflow.com/a/19533853/128597 )
Depois de muitas iterações grandes e feias e casos extremos estranhos ao longo dos anos, agora tenho uma seção concisa do meu .bashrc dedicado a isso.
Primeiro, você deve comentar ou remover esta seção do seu .bashrc (padrão para Ubuntu). Caso contrário, determinados ambientes (como
screen
sessões em execução ) ainda truncarão seu histórico:Segundo, adicione isso na parte inferior do seu .bashrc:
Nota: todos os comandos são gravados imediatamente após a execução; portanto, se você colar acidentalmente uma senha, não poderá simplesmente "matar -9 %%" para evitar a gravação do histórico, será necessário removê-la manualmente.
Observe também que cada sessão do bash carregará o arquivo de histórico completo na memória, mas mesmo que seu arquivo de histórico cresça para 10 MB (o que levará muito, muito tempo), você não notará muito efeito no tempo de inicialização do bash.
fonte
HISTFILESIZE
, é por isso que você deve remover qualquer ocorrência desse evento, exceto a desejada. Também será truncado na saída do shell (mas isso é esperado). E você não deveria precisarexport
.bash --norc
o histórico novamente.export HISTFILE="/home/$USER/hist/`uname -n``tty | tr '/' '-'`"
para manter o histórico do shell separado por sessão (com base no nome do host e no nome do tty). Claro que tenho que criar o diretório ~ / hist primeiro.PROMPT_COMMAND="${PROMPT_COMMAND:+${PROMPT_COMMAND} ;}history -a";
Incluir em ~ / .bashrc :
Esta resposta atende aos seguintes critérios:
um histórico mestre separado (nenhuma sessão pode interromper seu histórico)
gravação automática de histórico (sem teclas de atalho)
gravações pouco frequentes (sem anexar após cada comando)
fundo
Na inicialização interativa, se
$HISTFILESIZE
estiver definido como um número, o bash trunca$HISTFILE
para esse número. No fechamento interativo, se a opção shellhistappend
estiver definida, o bash anexa$HISTSIZE
linhas a$HISTFILE
, caso contrário, ele substitui$HISTFILE
.dicas para OSX (Terminal)
Toda vez que uma guia é criada no Terminal,
~/.bash_profile
é lida, o que significa que o bash não lê sua~/.bashrc
. Adicione a seguinte linha ao seu~/etc/bash_profile
:dicas para tela
Se você usa a tela, seu arquivo de configuração é ~ / .screenrc. Se você deseja que a tela registre o histórico, basta configurá-lo para usar um shell de login que fornecerá seus arquivos de inicialização do bash (e registrará seu histórico).
fonte
Um conceito diferente (pode não ser aplicável), mas você pode ter
unlimited
histórico ao usar o shell-sink .fonte