Using pwd -L inside the chpwd_functions hook inside zsh returns an invalid path. Here are some steps to reproduce this: function print_dir() { pwd -L } ; chpwd_functions=(print_dir) ; mkdir -p /tmp/chdir-test/symbolic-links/ ; mkdir -p /tmp/chdir-test/actual-directories/folder1 ; mkdir -p /tmp/chdir-test/actual-directories/folder2 ; ln -s /tmp/chdir-test/actual-directories/folder1 /tmp/chdir-test/symbolic-links ; # This works fine: cd /tmp/chdir-test/symbolic-links/folder1 ; # >> /tmp/chdir-test/symbolic-links/folder1 # This prints a path that does not exist (try it with cd!) cd ../folder2 ; # >> /tmp/chdir-test/*symbolic-links*/folder2 # This works fine pwd -L ; # >> /tmp/chdir-test/*actual-directories*/folder2 Thanks, Ajeet D'Souza