O contexto do problema:
ignoreboth
e erasedups
HIST_SIZE
e FILESIZE
com os limites desejados / práticos das linhas do histórico diferentes para o nosso usuário Comportamento esperado:
depois de fechar qualquer sessão e reabrir outro (s), não deve haver duplicatas no histórico de qualquer sessão.
não precisamos fechar todas as sessões antes de abrir outra
Os históricos das sessões ativas não devem ser afetados por outras sessões em execução / fechadas (para que a opção para um único histórico para todos não seja uma solução)
novas sessões, por outro lado, devem (naturalmente) ter linhas de histórico de todas as seções fechadas antes da hora de abrir (mas sem dups, é claro)
Comportamento:
Inicie uma sessão sem outras sessões paralelas em alguma máquina
Suponha um histórico salvo ² com as últimas três linhas:
./reference-point # anything, just to use as a reference
ls
la
ll
Inicie uma sessão aninhada (ssh ou até mesmo um comando bash, também para ser mantido no histórico). Eu farei um simples:
ssh machine
Faça 3 comandos, pelo menos uma vez cada, e em uma ordem possivelmente diferente. Por exemplo:
ll
ls
la
ll
Nossas últimas 4 linhas devem ser:
./reference-point # anything, just so we know
ls
la
ll
Agora fechamos esta sessão (com CTRL + D ou qualquer coisa que não seja mantida no histórico). Agora, na nossa primeira sessão, nossas 5 últimas linhas devem ser:
./reference-point # anything, just so we know
ls
la
ll
ssh machine
Feche esta sessão (que é a única sessão ativa agora)
Inicie outra sessão e verifique as últimas 10 linhas do histórico:
./reference-point # anything, just so we know
ls
la
ll
ls
la
ll
ssh machine
Este exemplo faz com que os dups históricos fiquem próximos uns dos outros. Mas os usos práticos, claro, não fariam. O efeito colateral ruim é que o tamanho do histórico não pode ser adivinhado a partir da configuração que podemos usar. Além disso, o comportamento está claramente errado.
O que posso fazer para resolvê-lo, ou (pelo menos) lidar gentilmente melhor com esse problema, além de aumentar muito mais do que eu queria que minha configuração "HIST * SIZE"?
Algumas notas que gostaria de fazer:
Esse bug é muito antigo e não conheço ninguém que tenha uma solução real para ele. E, no meu caso específico, pode haver problemas ou pequenas "capturas" com algumas soluções fornecidas na Web.
Este problema foi relatado em Savannah em 2014 . Mas parece que ninguém até leu até hoje. Você pode verificar isso (e, talvez, até mesmo fazer algum comentário útil lá, já que é um lugar oficial para o Bash).
-
¹ sessões aninhadas são necessárias para mim e devem ser muito comuns. Por exemplo: ssh para máquina de acesso de rede fechada, e após esse login novamente para uma ou mais máquinas (em sessões paralelas, também comuns)
² para verificar as linhas do histórico sem afetar os comandos mantidos, você pode usar 'ignoreboth' Bash config e apenas fazer um "histórico 10" (anote o espaço antes do comando!) ou similar. Eu usei isso para fazer o teste enquanto escrevia esta pergunta.
Tags bash command-history