Como: História ilimitada de Bash / shell?

75

Existe uma maneira de definir um histórico ilimitado no Bash?

    
por Dragos 04.05.2010 / 14:01

4 respostas

74

coloque isso em .bashrc:

export HISTFILESIZE=
export HISTSIZE=

Lá vai você, história ilimitada. Atualmente tenho 27000 entradas:)

De "man bash":

If HISTFILESIZE is not set, no truncation is performed.

Isso significa que .bash_history nunca é truncado

O mesmo também parece se aplicar ao HISTSIZE, embora eu não pudesse achar isso documentado.

Outra funcionalidade interessante que vou tentar é esta:

If the HISTTIMEFORMAT variable is set, time stamps are written to the history file, marked with the history comment character, so they may be preserved across shell sessions.

Deixe-me saber se você já tentou isso ...

    
por 22.07.2012 / 11:45
37

(repostando minha resposta do link )

Após muitas iterações grandes e feias e casos estranhos ao longo dos anos, agora tenho uma seção concisa de meu .bashrc dedicado a isso.

Primeiro, você deve comentar ou remover esta seção do seu .bashrc (padrão para o Ubuntu). Se você não o fizer, certos ambientes (como screen sessions) ainda truncarão seu histórico:

# for setting history length see HISTSIZE and HISTFILESIZE in bash(1)
# HISTSIZE=1000
# HISTFILESIZE=2000

Em segundo lugar, adicione isso ao final 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 escritos imediatamente após serem executados, portanto, se você colar acidentalmente uma senha, você não pode simplesmente "matar -9 %%" para evitar a gravação do histórico, você precisará removê-la manualmente.

Observe também que cada sessão bash carregará o arquivo completo do histórico na memória, mas mesmo que seu arquivo de histórico cresça para 10MB (o que levará um tempo longo, longo ), você não notará muito de um efeito no seu tempo de inicialização bash.

    
por 23.10.2013 / 08:20
8

Incluir em ~ / .bashrc :

# append a session's history on shell exit
shopt -s histappend
export HISTFILESIZE=
export HISTSIZE=

Essa resposta satisfaz os seguintes critérios:

  1. um histórico mestre separado (nenhuma sessão pode interromper seu histórico)

  2. gravação automática de histórico (sem teclas de atalho)

  3. gravações pouco frequentes (sem adição após cada comando)

plano de fundo

Na inicialização interativa, se $HISTFILESIZE estiver definido como um número, o bash truncará $HISTFILE para esse número. No fechamento interativo, se a opção do shell histappend estiver definida, o bash anexará $HISTSIZE linhas a $HISTFILE , caso contrário, substituirá $HISTFILE .

dicas para o OSX (Terminal)

Toda vez que uma aba é criada no Terminal, ~/.bash_profile é lido, o que significa que o bash não vai ler seu ~/.bashrc . Adicione a seguinte linha ao seu ~/etc/bash_profile :

# if bashrc has content, source it
[[ -s ~/.bashrc ]] && . ~/.bashrc

dicas para tela

Se você usar a tela, seu arquivo de configuração é ~ / .screenrc. Se você quiser que a tela registre o histórico, basta configurá-lo para usar um shell de login que fornecerá os arquivos de inicialização do bash (e registrará seu histórico).

# use bash, make it a login shell
defshell -bash
    
por 22.03.2015 / 20:47
3

Um conceito diferente (pode não ser aplicável), mas você pode ter um histórico de unlimited ao usar decodificador de shell .

    
por 04.05.2010 / 14:35