Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux $PWD是否总是等于${${:-.}:A}_Linux_Shell_Zsh - Fatal编程技术网

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
  • zsh
    5+
  • 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