O mesmo comando está listado no meu histórico repetidamente. Como posso evitar isso? Eu sei que é possível via, HISTCONTROL
mas não encontrei o caminho certo.
O mesmo comando está listado no meu histórico repetidamente. Como posso evitar isso? Eu sei que é possível via, HISTCONTROL
mas não encontrei o caminho certo.
Respostas:
Na bash
página do manual:
HISTCONTROL
Uma lista de valores separados por dois pontos que controla como os comandos são salvos na lista de histórico. Se a lista de valores incluir
ignorespace
, as linhas que começam com um caractere de espaço não são salvas na lista de histórico. Um valor deignoredups
faz com que as linhas correspondentes à entrada do histórico anterior não sejam salvas. Um valor deignoreboth
é uma abreviação deignorespace
eignoredups
. Um valor deerasedups
faz com que todas as linhas anteriores correspondentes à linha atual sejam removidas da lista de histórico antes que a linha seja salva. Qualquer valor que não esteja na lista acima é ignorado. Se HISTCONTROL estiver desabilitado ou não incluir um valor válido, todas as linhas lidas pelo analisador de shell serão salvas na lista de histórico, sujeitas ao valor de HISTIGNORE. A segunda linha e as linhas subsequentes de um comando composto de várias linhas não são testadas e são adicionadas ao histórico, independentemente do valor de HISTCONTROL.
Então coloque a seguinte linha no seu ~/.bashrc
:
export HISTCONTROL=ignoreboth:erasedups
~/.bash_login
maior parte do tempo ele iria trabalhar se .bashrc é modificado, mas que não é o caso todo o tempo.
source ~/.bashrc && source ~/.bash_profile
Cole isso no seu ~/.bashrc
:
export HISTCONTROL=ignoredups
Você poderia usar ignoreboth
. Isso é uma abreviação para ambos ignorespaces
(comandos começando com espaços) e ignoredups
(duplicatas).
Eu prefiro ignoredups
por conta própria, pois acho o comportamento padrão de ignorar comandos com espaços na frente bastante irritante quando copio um comando de um site e ele não é salvo porque eu acidentalmente copiei um espaço também ... Mas para cada um deles.
ignoredups
faz com que as linhas correspondentes à entrada do histórico anterior não sejam salvas . Ele remove apenas linhas idênticas consecutivas.
Colocá-lo ~/.bashrc
aplicará a solução da @ alvin em diferentes sessões como wlell
HISTCONTROL=ignoredups:erasedups
shopt -s histappend
PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"
export HISTCONTROL
e o seu não? Qual é a diferença? É trabalhar para mim sem exportação, estou apenas curioso
export
faz com que a variável disponível para sub-processos. stackoverflow.com/q/1158091/552621 No caso de HISTCONTROL
, PROMPT_COMMAND
etc, essas variáveis são usadas pelo próprio shell; portanto, talvez não seja necessário exportá-las (para processos filhos).
Registrar uniqely todos os novos comandos é complicado. Primeiro você precisa adicionar
~/.profile
ou semelhante:
HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'
Então você precisa adicionar a ~/.bash_logout
:
history -a
history -w