Duplicados no histórico bash

3

Eu tenho o seguinte no meu ~/.bashrc

HISTCONTROL=ignoreboth:erasedups

No entanto, meu histórico contém muitas duplicatas, por exemplo Eu tenho 5 entradas para sudo apt-get upgrade .

Estou executando Raspbian Jessie e acesso principalmente via ssh .

PS Acabei de inserir sudo apt-get upgrade enquanto escrevia isso e agora só tenho uma entrada. Alguma ideia do porquê e como posso preveni-lo?

    
por Milliways 05.03.2016 / 02:05

3 respostas

4

Não há necessidade de apagar como você já está ignorando.

Ignoreboth cuidará de duplicatas e comandos de espaço em branco.

Apenas tente ignorar ou apagar dups.

"HISTCONTROL=ignoreboth"

Use apenas isso e recarregue o bash. Obrigado.

    
por 05.03.2016 / 02:59
0

Registrar exclusivamente cada novo comando é complicado. Primeiro você precisa adicionar ~/.profile ou similar:

HISTCONTROL=erasedups
PROMPT_COMMAND='history -w'

Então você precisa adicionar a ~/.bash_logout :

history -a
history -w
    
por 04.02.2018 / 00:23
-1

Existem duas listas de comandos:

  • na memória.
  • em arquivo.

A configuração para HISTCONTROL atua sobre a lista de memória. Essa lista pode ser vista pelo comando history sem opções. Se você digitar um comando, ele será anexado à lista. Se o comando a adicionar for igual ao último comando da lista e a opção ignoredups estiver definida ou a opção erasedups estiver definida, o comando será descartado. Nesse caso, as duas opções têm alguma semelhança. Se a opção erasedups estiver definida, todas as aparências anteriores do comando serão removidas da lista de memória (mas não do arquivo). Essa remoção somente acontecerá para um novo comando repetido. Ou seja: comandos repetidos permanecerão até que um novo comando seja anexado à lista.

Para gravar a lista de memórias no arquivo, existe o comando history -w (que substituirá o arquivo inteiro por uma nova cópia). A lista no arquivo não será atualizada até que seja gravada. Ou anexado com history -a (que acrescentará apenas novas linhas que não foram acrescentadas antes e poderá deixar comandos repetidos mais antigos no arquivo). Quando o bash sair, a opção histappend escolherá entre substituir ou anexar ao arquivo. A pendência pode deixar comandos repetidos intactos.

Uma maneira de limpar a lista de arquivos (mantendo a última aparição de um comando) é:

$ history | sort -urk2 | sort -n | sed 's/^ \+[0-9]\+ \+//'  >~/.bash_history

Uma maneira de anexar cada comando ao arquivo é usar a variável bash do comando prompt para executar um history -w em cada nova linha de comando:

$ PROMPT_COMMAND='history -w'

Para tornar isso automático, todos os comandos a seguir devem ser adicionados ao ~/.bashrc (geralmente no linux) ou ~/.profile (geralmente no mac):

HISTFILE=${HISTFILE:-~/.bash_history}
HISTCONTROL=ignoreboth:erasedups
PROMPT_COMMAND='history -w'
nl "$HISTFILE"|sort -k2 -k 1,1nr|uniq -f1|sort -n|cut -f2- >"${HISTFILE}.temp" && mv "$HISTFILE"{.temp,}
history -c; history -r
    
por 01.07.2018 / 10:26