Eu uso vários terminais Konsole. E eu quero que todos os comandos que digito em todos os terminais sejam salvos no histórico de comandos, para que o próximo konsole que eu abra tenha todos eles. Para impedir que cada terminal sobrescreva o histórico de comandos do outro terminal, dei as seguintes configurações no meu.bashrc
# avoid duplicates and commands starting with space
export HISTCONTROL=ignoredups:erasedups:ignorespace
# append history entries..
shopt -s histappend
#My machine reboots without warning sometimes.Hence to save commands instantaneously.
export PROMPT_COMMAND="history -a"
export HISTSIZE=1000
PS1="\[\e[1;34m\]\! \[\e[0m\]"$PS1
Eu dei a última linha para ver o número do comando no meu prompt. O comando no. nunca ultrapassou 600, mas alguns dos meus antigos comandos ainda estão desaparecendo da história. Existem muitos comandos que são dados repetidamente, mas, como esperado ignoredups
, nunca aumenta o comando no prompt. No entanto, os comandos antigos ainda estão desaparecendo. E o número de comandos na história permanece sempre um pouco mais de 500.
O .bash_history
arquivo ainda contém muitas duplicatas, apesar de ignorados.
PS: A saída de eco $HISTSIZE
e $HISTFILESIZE
são ambos=1000
Atualização: Encontrei o problema na entrada acima para .bashrc
. Apenas chamando history -a
em PROMPT_COMMAND
simplesmente acrescenta o último novo comando para o .bash_history. Portanto, o ignoredups
e erasedups
não tem efeito.
Existe alguma maneira, ainda posso escrever no .bash_history sem duplicatas de todos os terminais? Não quero carregar o histórico inteiro em cada prompt de comando history -r
e escrevê-lo novamente history -w
, porque os comandos que eu emiti em um terminal também aparecerão em outro terminal em execução paralelo. Quero que os comandos combinados apareçam apenas em um novo terminal.
O enigma, por que minha história estava ficando reduzida a 500 está resolvido. Percebi que isso acontecia cada vez que entrava nessa máquina. Criar um .bash_profile
com a seguinte entrada resolveu esse problema.
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
Agora meu .bashrc é executado toda vez que eu ssh também. E o tamanho do arquivo de histórico agora está aumentando monotonicamente.
bug-bash
lista de discussão um ano após a publicação desta: lists.gnu.org/archive/html/bug-bash/2013-07/msg00092.html