Controle de origem e symlink para .zhistory

1

Eu simbolizo os arquivos de ponto do meu diretório pessoal para os arquivos reais em uma pasta separada que está sob o controle de origem do git. Isso funciona muito bem, mas, por algum motivo, estou tendo problemas com .zhistory .

$ echo $HISTFILE
/Users/amelio/.zhistory
$ cd & ln -s $DOT_FILES_REPO/.zhistory .
$ fc -W && fc -R

Depois de executar o acima, vejo que .zhistory é não um link simbólico após o último comando. Por quê? E como posso ter .zhistory ao vivo no meu diretório home com um link simbólico para um arquivo diferente?

    
por Amelio Vazquez-Reina 11.09.2017 / 22:39

1 resposta

3

Quando o zsh atualiza o arquivo do histórico, ele cria um arquivo temporário e o move para o lugar, o equivalente a

print the history >.zhistory.new
mv .zhistory.new .zhistory

Se .zhistory foi um link simbólico antes, não é um depois.

A vantagem deste método é que se o zsh travar (por causa de um bug, porque ele é eliminado abruptamente, devido a uma reinicialização repentina), o arquivo de histórico não será tocado. Em particular, o arquivo de histórico nunca fica truncado ou é inválido.

Se você quiser colocar seu arquivo de histórico em um local diferente, não use um link simbólico, defina a variável HISTFILE .

    
por 11.09.2017 / 22:57