Linux $PWD是否总是等于${${:-.}:A}
给定Linux $PWD是否总是等于${${:-.}:A},linux,shell,zsh,Linux,Shell,Zsh,给定 现代Linux/UNIX/OSX zsh5+ setopt chase_链接 PWD未被异常设置 是 始终正确?不,这并不总是正确的: 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 vinc1
- 现代Linux/UNIX/OSX
5+zsh
setopt chase_链接
未被异常设置PWD
始终正确?不,这并不总是正确的:
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
我忍不住想知道是否有一种方法可以将这与。我意识到它们是关于不同的工具的,但潜在的问题似乎是“什么是$PWD
,它与计算当前路径的其他方法有什么关系?”我还想知道这两种方法是否更适合我最初把它们作为一个问题,但我被告知分开的问题应该保持分开zsh
可以控制$PWD
,它可能与bash
处理$PWD
的方式不同。对于疯狂的线路噪音,投票结果是:)哇!这是一个相当模糊的不同,我很高兴你找到了它。所以如果我在.zshrc
中做cd.
,它们总是一样的?@PythonNut不,在cd.
之后,它们不一定是一样的。我已经改正并完成了我的回答。您甚至可以看到,尝试输出当前工作目录的实际路径的4个表单会产生4个不同的输出。
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