Respostas:
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 uma HISTSIZE
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:
# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000
Segundo, adicione isso na parte inferior do seu .bashrc:
# Eternal bash history.
# ---------------------
# Undocumented feature which sets the size to "unlimited".
# https://stackoverflow.com/questions/9457233/unlimited-bash-history
export HISTFILESIZE=
export HISTSIZE=
export HISTTIMEFORMAT="[%F %T] "
# Change the file location because certain bash sessions truncate .bash_history file upon close.
# http://superuser.com/questions/575479/bash-history-truncated-to-500-lines-on-each-login
export HISTFILE=~/.bash_eternal_history
# Force prompt to write history after every command.
# http://superuser.com/questions/20900/bash-history-loss
PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
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.
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 precisar export
.
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 :
# append a session's history on shell exit
shopt -s histappend
export HISTFILESIZE=
export HISTSIZE=
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)
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 shell histappend
estiver definida, o bash anexa $HISTSIZE
linhas a $HISTFILE
, caso contrário, ele substitui $HISTFILE
.
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
:
# if bashrc has content, source it
[[ -s ~/.bashrc ]] && . ~/.bashrc
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).
# use bash, make it a login shell
defshell -bash
Um conceito diferente (pode não ser aplicável), mas você pode ter unlimited
histórico ao usar o shell-sink .