Atingir a seta para cima não percorre o histórico

0

Sou novo no Unix & Linux e queria comentar sobre uma abordagem já exaustiva para uma pergunta diferente. Meu representante não é 50, ainda (triste), por isso não vai me deixar. Eu tentei esta solução para esta pergunta: Preserve o histórico bash em várias janelas de terminal

export HISTCONTROL=ignoredups:erasedups  # no duplicate entries
export HISTSIZE=100000                   # big big history
export HISTFILESIZE=100000               # big big history
shopt -s histappend                      # append to history, don't overwrite it

# Save and reload the history after each command finishes
export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

Infelizmente, isso causa o resultado de que, embora tenha um histórico crescente (mesclado) (desejado), em novas janelas, não posso mais percorrer nenhum deles usando a 'seta para cima' (indesejada). Ou seja, só posso percorrer os comandos executados na nova janela. Por exemplo, se eu abrir um novo terminal e tiver 500 linhas de histórico entrando, eu executo 3 comandos, só posso percorrer aqueles 501-503 com a seta para cima ...

Eu abro um novo terminal e faço o seguinte:

$ history #enter
  .
  .
  584 foo
  585 bar
  .
  .
  600 baz

$ history #enter

  1 history

Alguém poderia explicar por que isso acontece e se houver uma solução alternativa? Obrigado.

    
por Dylan_Larkin 10.07.2017 / 16:57

2 respostas

0

Parece que a solução pode ser navegada para a seção de comentários no link que postei: consulte Histórico de bash:" ignoredups "e" erasedups "definem conflito com histórico comum entre as sessões

Em vez de:

export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

Uso:

PROMPT_COMMAND="history -n; history -w; history -c; history -r; $PROMPT_COMMAND"
    
por 10.07.2017 / 19:57
0

O motivo para ter o histórico de todos os lugares onde o bash tem um histórico (e grava nele) é que você está gravando no arquivo (history -a) e todos os outros shells do bash são também escrevendo no mesmo arquivo.

Então, você está lendo todos os comandos do arquivo (history -r) para a memória.

Como solução, você pode escrever (novos) comandos no arquivo (history -a), mas não ler o arquivo resultante. A lista de comandos na memória pertencerá a cada instância do bash em execução. Cada instância do bash terá uma lista diferente de comandos. Todos os comandos serão gravados no arquivo de histórico.

Use (em bashrc ou similar):

PROMPT_COMMAND="history -a; $PROMPT_COMMAND"
    
por 11.07.2017 / 02:48