特定
zsh 5+setopt chase_linksPWD 没有设置异常 是
[[ "$PWD" == "${${:-.}:A}" ]]
Run Code Online (Sandbox Code Playgroud)
总是如此吗?
不,这并不总是正确的:
xvii:~> ls -l foo
lrwxrwxrwx 1 vinc17 vinc17 10 2014-07-05 01:12:06 foo -> bar/subdir/
xvii:~> bash
vinc17@xvii:~$ cd foo
vinc17@xvii:~/foo$ pwd
/home/vinc17/foo
vinc17@xvii:~/foo$ zsh -f
xvii% echo $PWD
/home/vinc17/foo
xvii% setopt chase_links
xvii% echo $PWD
/home/vinc17/foo
xvii% echo "${${:-.}:A}"
/home/vinc17/bar/subdir
xvii% pwd
/home/vinc17/bar/subdir
Run Code Online (Sandbox Code Playgroud)
但是,如果 zsh 在没有符号链接段的当前工作目录中启动,则当前工作目录在 a cd(或等效项)之后将永远不会有符号链接段,并且..或.在当前工作目录中也是不可能的,因为它们在以下情况下解析:更改目录,因此如果目录仍然存在,$PWD则 和应该是等效的(见下文)。${${:-.}:A}
在上面的示例中,在 a 之后cd .,zsh 更新$PWD为/home/vinc17/bar/subdir。但是, acd .并不能使两种形式在所有情况下都等效:
xvii% mkdir my_dir
xvii% cd my_dir
xvii% rmdir ../my_dir
xvii% echo $PWD
/home/vinc17/my_dir
xvii% echo "${${:-.}:A}"
/home/vinc17/my_dir
xvii% pwd
/home/vinc17/my_dir
xvii% cd .
xvii% echo $PWD
/home/vinc17/my_dir
xvii% echo "${${:-.}:A}"
xvii% pwd
.
xvii% echo "$(realpath .)"
.: No such file or directory
Run Code Online (Sandbox Code Playgroud)