Existem duas variáveis que controlam o tamanho do histórico:
HISTFILESIZE The maximum number of lines contained in the history file. When this variable is assigned a value, the history file is truncated, if necessary, to contain no more than that number of lines by removing the oldest entries. The history file is also truncated to this size after writing it when a shell exits. If the value is 0, the history file is truncated to zero size. Non-numeric values and numeric values less than zero inhibit truncation. The shell sets the default value to the value of HISTSIZE after reading any startup files.
e
HISTSIZE The number of commands to remember in the command history (see HISTORY below). If the value is 0, commands are not saved in the history list. Numeric values less than zero result in every command being saved on the history list (there is no limit). The shell sets the default value to 500 after reading any startup files.
Essas duas variáveis permitem controlar o comportamento do seu histórico. Basicamente, HISTSIZE
é o número de comandos salvos durante sua 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, porque HISTSIZE
está definido como 10, history
retorna uma lista de 10 comandos. No entanto, se você efetuar logout e, em seguida, efetuar login novamente, history
retornará apenas 5 comandos porque HISTFILESIZE
está definido como 5. Isso ocorre porque, depois de sair da sessão, suas HISTFILESIZE
linhas de seu histórico são salvas em seu arquivo de histórico ( ~/.bash_history
por padrão, mas controlado por HISTFILE
). Em outras palavras, os comandos são adicionados a HISTFILE
até que atinjam $HISTFILESIZE
linhas. Nesse ponto, cada linha subsequente adicionada significa que o primeiro comando do arquivo será removido.
Você pode definir os valores dessas variáveis em ~/.profile
(ou ~/.bash_profile
se esse arquivo existir). Não os defina em ~/.bashrc
primeiro porque eles têm nenhum negócio sendo definido e, em segundo lugar, porque isso causaria você tem um comportamento diferente em log-in vs shells 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 alguns comandos comuns que raramente são de interesse. Por exemplo, você pode definir:export HISTIGNORE="pwd:df:du"
Isso faria com que qualquer comando iniciado com
pwd
,df
oudu
fosse ignorado e não fosse salvo em seu histórico. -
HISTCONTROL
: Esse permite escolher como o histórico funciona. Pessoalmente, eu o defino comoHISTCONTROL=ignoredups
, o que faz com que ele salve os comandos duplicados apenas uma vez. Outras opções sãoignorespace
para ignorar os comandos que começam com whitespace eerasedups
, o que faz com que todas as linhas anteriores que correspondem à linha atual sejam removidas da lista de histórico antes que essa linha seja salva.ignoreboth
é uma forma abreviada de ignorar espaço e ignorados. -
HISTTIMEFORMAT
: isso permite que você defina o formato de hora do arquivo de histórico. Veja a resposta de Pandya ou leiaman bash
para detalhes.
Para mais ajustes, você tem:
-
A opção
histappend
bash. Isso pode ser definido executandoshopt -s histappend
ou adicionando esse comando ao seu~/.bashrc
. Se esta opção estiver definidathe history list is appended to the file named by the value of the HISTFILE variable when the shell exits, rather than overwriting the file.
Isso é muito útil, pois permite combinar as histórias de diferentes sessões (pense em diferentes terminais, por exemplo).
-
O comando
history
tem duas opções úteis:-
history -a
: faz com que o último comando seja gravado no arquivo de histórico automaticamente -
history -r
: importa o arquivo de histórico para a sessão atual.
Você poderia, por exemplo, adicionar estes dois comandos ao seu
PROMPT_COMMAND
(que é executado toda vez que o seu shell mostra o prompt, então sempre que você inicia um novo shell e após cada comando):export PROMPT_COMMAND='history -a;history -r;'
Combinados, eles garantem que qualquer novo terminal que você abrir importará imediatamente o histórico de quaisquer outras sessões de shell. O resultado é um histórico comum em todas as sessões de terminais / shell.
-