Existem duas variáveis que controlam o tamanho do histórico:
HISTFILESIZE O número máximo de linhas contidas no arquivo de histórico. Quando essa variável recebe um valor, o arquivo de histórico é truncado, se necessário, para conter não mais que esse número de linhas, removendo as entradas mais antigas. O arquivo de histórico também é truncado para esse tamanho depois de gravado quando um shell sai. Se o valor for 0, o arquivo de histórico será truncado para o tamanho zero. Valores não numéricos e valores numéricos menores que zero inibem o truncamento. O shell define o valor padrão como HISTSIZE depois de ler qualquer arquivo de inicialização.
e
HISTSIZE O número de comandos a serem lembrados no histórico de comandos (consulte HISTORY abaixo). Se o valor for 0, os comandos não serão salvos na lista de histórico. Valores numéricos menores que zero resultam em todos os comandos salvos na lista de histórico (não há limite). O shell define o valor padrão para 500 depois de ler qualquer arquivo de inicialização.
Essas duas variáveis permitem controlar o comportamento do seu histórico. Basicamente, HISTSIZE
é o número de comandos salvos durante a sessão atual e HISTFILESIZE
o número de comandos que serão lembrados nas sessões. Então, por exemplo:
$ echo $HISTSIZE
10
$ echo $HISTFILESIZE
5
$ history | wc
10 29 173
No exemplo acima, como HISTSIZE
é definido como 10, history
retorna uma lista de 10 comandos. No entanto, se você efetuar logoff e logon novamente, history
retornará apenas 5 comandos porque HISTFILESIZE
está definido como 5. Isso ocorre porque, quando você sai da sessão, suas HISTFILESIZE
linhas do seu histórico são salvas no seu arquivo de histórico ( ~/.bash_history
por padrão, mas controlado por HISTFILE
) Em outras palavras, os comandos são adicionados HISTFILE
até que cheguem $HISTFILESIZE
às linhas em que ponto, cada linha subsequente adicionada significa que o primeiro comando do arquivo será removido.
Você pode definir os valores dessas variáveis no seu ~/.profile
(ou ~/.bash_profile
se esse arquivo existir). Não defina-os ~/.bashrc
primeiro, porque eles não têm negócios definidos e, em segundo lugar, porque isso faria com que você tivesse um comportamento diferente nos shells de login versus não-login, o que pode levar a outros problemas .
Outras variáveis úteis que permitem ajustar o comportamento do seu histórico são:
HISTIGNORE
: Isso permite que você ignore determinados comandos comuns que raramente são de interesse. Por exemplo, você pode definir:
export HISTIGNORE="pwd:df:du"
Isso faria com que qualquer comando que comece com pwd
, df
ou du
seja ignorado e não seja salvo no seu histórico.
HISTCONTROL
: Este permite que você escolha como o histórico funciona. Pessoalmente, eu o defino para HISTCONTROL=ignoredups
que ele salve comandos duplicados apenas uma vez. Outras opções são ignorespace
ignorar comandos iniciados com espaço em branco e erasedups
que fazem com que todas as linhas anteriores correspondentes à linha atual sejam removidas da lista de histórico antes que a linha seja salva. ignoreboth
é uma abreviação de ignorespace e ignoredups.
HISTTIMEFORMAT
: Permite definir o formato da hora do arquivo de histórico. Veja a resposta de Pandya ou leia man bash
para detalhes.
Para um ajuste fino adicional, você tem:
A histappend
opção do bash. Isso pode ser definido executando shopt -s histappend
ou adicionando esse comando ao seu ~/.bashrc
. Se esta opção estiver configurada
a lista de histórico é anexada ao arquivo nomeado pelo valor da variável HISTFILE quando o shell sai, em vez de sobrescrever o arquivo.
Isso é muito útil, pois permite combinar o histórico de diferentes sessões (pense em diferentes terminais, por exemplo).
O history
comando possui duas opções úteis:
Você pode, por exemplo, adicionar esses dois comandos ao seu PROMPT_COMMAND
(que é executado toda vez que seu shell mostra o prompt, portanto, sempre que você inicia um novo shell e depois de cada comando, é executado):
export PROMPT_COMMAND='history -a;history -r;'
Combinados, eles garantem que qualquer novo terminal aberto importe imediatamente o histórico de quaisquer outras sessões do shell. O resultado é um histórico comum em todos os terminais / sessões de shell.