Salvando o histórico de bash de múltiplos Konsole não funcionando corretamente

9

Eu uso múltiplos terminais Konsole. E eu quero que todos os comandos que eu digito em cada terminal sejam salvos no histórico de comandos, de modo que o próximo konsole que eu abrir tenha todos eles. Para evitar que cada terminal gravasse o histórico de comandos do outro terminal, forneci 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 não. nunca foi acima de 600, mas ainda alguns dos meus antigos comandos estão desaparecendo da história. Existem muitos comandos que são dados repetidamente, mas como esperado de ignoredups , nunca aumenta o prompt no no prompt. No entanto, os comandos antigos ainda estão desaparecendo. E o número de comandos no histórico sempre fica um pouco acima de 500.

O arquivo .bash_history ainda contém muitos duplicados, apesar dos ignorados.

PS: A saída de echo $HISTSIZE e $HISTFILESIZE são ambos =1000

Atualização: Eu encontrei o problema na entrada acima para .bashrc . Apenas chamar history -a in PROMPT_COMMAND simplesmente anexará o último novo comando à .bash_history. Portanto, o ignoredups e erasedups não têm efeito.

Existe alguma maneira, eu ainda posso escrever para o .bash_history sem duplicatas de cada terminal? Eu não quero carregar todo o histórico em cada prompt de comando por history -r e gravá-lo novamente com history -w , porque os comandos que eu emiti em um terminal aparecerão em outro terminal em paralelo também. Eu quero que os comandos combinados apareçam apenas em um novo terminal.

O quebra-cabeça, por que minha história foi cortada para 500 está resolvido. Eu notei que isso acontecia toda vez que eu entrava nessa máquina. A criação de um .bash_profile com a entrada a seguir resolveu esse problema.

if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

Agora meu .bashrc é executado cada vez que eu ssh também. E o tamanho do arquivo de histórico agora aumenta de maneira monótona.

    
por indiajoe 09.09.2012 / 13:55

2 respostas

1

Concluí que não é possível anexar os novos comandos diretamente e, ao mesmo tempo, remover quaisquer duplicatas. Então, minha solução é executar os seguintes comandos em algum momento. ou colocá-lo no meu crontab.

tac $HOME/.bash_history | awk '!seen[$0]++' | tac > $HOME/.hist_Temp 
mv $HOME/.hist_Temp $HOME/.bash_history

O comando acima manterá a última ocorrência de um comando e removerá todas as outras repetições acima dele do arquivo de histórico sem atrapalhar o pedido.

    
por 21.09.2012 / 14:03
0

É feio e tenho certeza de que sed ou awk seria melhor, mas tentei corrigir o mesmo problema adicionando isso no meu .bashrc :

export HISTFILE=.bash_history_'tty | python -c 'import sys ; sys.stdout.write(sys.stdin.read().strip().replace("/", "_"))''

Isto irá criar um arquivo de histórico separado para cada terminal que você abrir, no entanto, se você executar o bash no bash, ele usará o mesmo histórico, mas não deverá sobrescrevê-lo. Vou avisá-lo com uma ressalva da minha experiência. Embora isso funcione e evite que o histórico seja sobrescrito, você precisa grep de vários arquivos para tentar encontrar o histórico que está procurando, o que às vezes pode ser demorado.

    
por 16.01.2013 / 09:50