I symlink dot files from my home directory to actual files in a separate folder that is under git source control. This works great, but for some reason I am having problems with .zhistory.

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

After running the above, I see that .zhistory is not a symlink after the last command. Why? And how can I have .zhistory live in my home directory with a symlink to a different file?


When zsh updates the history file, it creates a temporary file, then moves it into place, the equivalent of

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

If .zhistory was a symbolic link before, it isn't one afterwards.

The advantage of this method is that if zsh crashes (because of a bug, because it's killed abruptly, because of a sudden reboot) then the history file is untouched. In particular, the history file is never left truncated or invalid.

If you want to put your history file in a different location, don't use a symbolic link, set the HISTFILE variable.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.