Não é possível aumentar o comprimento do histórico do shell bash do Mac OSX

26

Eu configurei ~ / .bash_profile há algum tempo para ter mais de 500 linhas, mas parece que o sistema não pode capturar isso.

Você sabe por quê?

> nano -w ~/.bash_profile
export CLICOLOR=1
export LSCOLORS=GxFxCxDxBxegedabagaced
HISTFILESIZE=10000000

> history | wc -l
     500
biotecnologia
fonte

Respostas:

34

Você também precisa definir HISTSIZE=10000000.

HISTFILESIZEdetermina o número de linhas a serem mantidas no arquivo histórico, enquanto HISTSIZEdetermina o número de linhas a serem mantidas na memória. Ambos padrão para500

Execute echo $HISTFILESIZE $HISTSIZEantes de fazer a alteração e depois novamente. Você deve ver 10000000 500primeiro e 10000000 10000000depois.

Allan
fonte
15

Você precisa exportar HISTSIZE e HISTFILESIZEvariáveis ​​de ambiente em seu ~/.bash_profilearquivo.

Adicione as seguintes linhas no seu ~/.bash_profile:

# history size
export HISTFILESIZE=1000000
export HISTSIZE=1000000
Petr Javorik
fonte
8

Responda:

Tudo o que você precisa fazer é definir HISTSIZEseu perfil do bash ( ~/.bash_profile). Você pode deixar por HISTFILESIZE definir . Isto irá configurar tanto a história na memória ea história baseada em arquivo.

# Saves 10 million lines in memory and in the bash history file.
HISTSIZE=10000000

Explicação, informações adicionais.

O problema é HISTFILESIZE define apenas o histórico máximo armazenado no arquivo quando você inicia uma sessão. HISTSIZE é o que determina quantas linhas são salvas no final de uma sessão. Se HISTFILESIZE é maior do que o seu HISTSIZE, você nunca vai ver mais do que o seu HISTSIZE porque o arquivo está ficando substituído com comandos HISTSIZE ( a menos que você história set para acrescentar, mas isso é um tópico separado: olhar para cima histappendno shell builtin comandos para que) .

É por isso que você não vê efeito. Com HISTSIZE no padrão (provavelmente 500), seu arquivo de histórico é sempre substituído pelos comandos $ HISTSIZE mais recentes. Qualquer coisa mais antiga (que poderia aumentar a lista além de $ HISTSIZE) é apagada.

Na maioria dos casos, não há necessidade de definir HISTFILESIZE independentemente de HISTSIZE.

HISTSIZE determina quantas linhas serão gravadas no arquivo de histórico. A lista de comandos é truncada na saída, antes de gravar no arquivo de histórico, mantendo N as linhas mais recentes. Por padrão, esta lista substitui o arquivo de histórico.

HISTFILESIZE determina o tamanho do arquivo de histórico (em linhas). O arquivo é truncado na inicialização, mantendo N linhas mais recentes. Além disso, o arquivo de histórico é potencialmente truncado sempre que HISTFILESIZE estiver definido.

Finalmente, embora pareça não estar documentado, o BASH define HISTFILESIZE com base em HISTSIZE se HISTSIZE estiver definido durante a inicialização. Eu tentei isso no macOS e em algumas variedades do Ubuntu, e o comportamento é consistente. Se você definir HISTSIZE em um arquivo de inicialização ( não através da linha de comando, por qualquer meio), HISTFILESIZE será configurado para corresponder. (Tente você mesmo: defina HISTSIZE para um valor arbitrariamente grande em .bash_profile, saia e inicie um novo terminal e, em seguida, echo $HISTSIZE $HISTFILESIZEvocê os encontrará correspondentes.)

Como resultado, não há razão para tocar em HISTFILESIZE, a menos que você queira valores diferentes, e os casos de uso com valores diferentes são raros (e geralmente envolvem mais configurações de personalização do histórico para obter algo útil).

Zim
fonte
Você está correto Zim. O código-fonte do Bash mostra que ele apenas definirá HISTFILESIZE como HISTSIZE se HISTFILESIZE estiver desativado. git.savannah.gnu.org/cgit/bash.git/tree/…
robert