gpt4 book ai didi

linux - $PWD 是否总是等于 $(realpath .)

转载 作者:可可西里 更新时间:2023-11-01 11:46:07 27 4
gpt4 key购买 nike

给定

  • 现代 Linux/UNIX/OSX(带 realpath)
  • bash 4+(甚至在 OSX 上)

"$PWD" == "$(realpath .)"

总是正确的?

最佳答案

很容易测试情况并非总是如此。

$ mkdir /tmp/realdir
$ cd /tmp/realdir
$ echo $PWD
/tmp/realdir
$ ln -s realdir /tmp/fakedir
$ cd /tmp/fakedir
$ echo $PWD
/tmp/fakedir
$ realpath .
/tmp/realdir

所以不,$PWD 并不总是与 $(realpath .) 相同。

bash manual表示 PWD 变量由内置的 cd 命令设置。默认 behaviour of cd是:

symbolic links are followed by default or with the -L option

这意味着,如果您 cd 进入符号链接(symbolic link),变量将相对于符号链接(symbolic link)进行解析,而不是相对于物理路径。您可以使用 -P 选项更改 cd 命令的此行为。这将导致它在 PWD 变量中报告物理目录:

$ cd -P /tmp/fakedir
$ echo $PWD
/tmp/realdir

您可以使用 -P 选项更改 bash 的默认行为:

$ set -P
$ cd /tmp/fakedir
$ echo $PWD
/tmp/realdir
$ set +P
$ cd /tmp/fakedir
$ echo $PWD
/tmp/fakedir

当然,尽管您可以在执行 cd 后将任何您想要的内容分配给 PWD 变量,并且它采用该值:

$ cd /tmp/fakedir
$ PWD=/i/love/cake
$ echo $PWD
/i/love/cake

但这并不是你真正要问的。

关于linux - $PWD 是否总是等于 $(realpath .),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25223466/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com