特定
>现代Linux / UNIX / OSX
> zsh 5
> setopt chase_links
> PWD没有设置异常
是
[[ "$PWD" == "${${:-.}:A}" ]]
总是如此吗?
解决方法
不,这并非总是如此:
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
但是如果zsh在没有符号链接段的当前工作目录中启动,那么当前工作目录将永远不会在cd(或等效的)和..或之后具有符号链接段.因为在更改目录时它们已被解析,所以在当前工作目录中是不可能的,因此如果目录仍然存在,$PWD和${${: – .}:A}应该是等效的(见下文).
在上面的例子中,在cd.之后,zsh将$PWD更新为/ home / vinc17 / bar / subdir.但是,一张CD.在所有情况下都不会使两种形式都相同:
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