Histórico do arquivo sem sair do shell

3

Acabei de perceber que um fluxo de trabalho que estou usando há anos não faz o que é suposto fazer. Como eu não percebi isso por tanto tempo, você pode pensar que não vale a pena investir muito nisso, mas acontece que, agora, isso se tornou importante.

Do que estou falando? Ok, eu tenho tmux correndo com várias sessões e cada sessão tem janelas diferentes e assim por diante. Trabalhar assim é maravilhoso. Há uma desvantagem para isso, no entanto. Quando o servidor é reiniciado, por qualquer que seja a resason, fecha todas as minhas sessões. Justo o suficiente, não pode ser evitado e não acontece com frequência. No entanto, a parte chata é que todos os meus zsh ou bash history se foram também. Isto é um problema. Eu confio na minha história, talvez seja demais.

Eu estava contornando esse problema batendo fc -W (em zsh ) de vez em quando. Eu pensei que isso iria anexar o histórico que está na memória e eu só perderia a parte entre minha última invocação de fc -W e a reinicialização do servidor. Mas não é isso que faz. Se eu usar fc -W em uma janela, então fc -W em outra, o histórico da primeira janela será sobrescrito pelo histórico da segunda janela. Eu precisaria usar fc -R primeiro, mas isso iria duplicar toda a história ... basicamente eu estava usando indevidamente o comando fc o tempo todo.

Aqui está a pergunta: Como posso ter certeza de não perder meu histórico quando estiver em tmux e houver um corte repentino de energia? Nota:

  • Eu uso uma história infinita, no caso que importa.
  • Perder um pouco da história é ok, ou seja, se precisar invocar um comando manualmente (ou em um cronjob) e perder a parte do histórico desde que o comando foi executado pela última vez, tudo bem.
  • Sair do terminal e abrir um novo não é a solução.
  • Eu não quero armazenar meus comandos diretamente no histórico, pois isso mistura histórias diferentes.
  • As soluções para bash e zsh são bem-vindas. zsh é o preferido.

Editar: destaque a parte que todos parecem entender mal.

    
por pfnuesel 07.01.2018 / 18:17

2 respostas

2

Em zsh, use fc -AI para salvar seu histórico, não fc -W . Use -A , não -W , caso contrário, o histórico de outras instâncias do shell será sobrescrito. E -I salva apenas as novas entradas do histórico desde o último salvamento.

Dado seu fluxo de trabalho, em vez de salvar manualmente, você provavelmente deve salvar o histórico automaticamente. Ative a opção inc_append_history para salvar cada comando no arquivo de histórico imediatamente antes de ser executado.

Embora seja possível obter o mesmo efeito no bash, o compartilhamento de histórico entre instâncias do bash é mais difícil. Veja Preserve o histórico bash em várias janelas de terminal

    
por 07.01.2018 / 21:22
2

Você pode salvar seu histórico de bash com este comando (não estou familiarizado com zsh ):

history -a

Isso parece funcionar com zsh :

fc -ln 1 -1 > ~/.zsh_history
    
por 07.01.2018 / 18:44