当我通过符号链接 cd 时,为什么 pwd 显示符号链接而不是真实路径?

当我通过符号链接 cd 时,为什么 pwd 显示符号链接而不是真实路径?

我创建了一个ln -s 1 2指向目录内部目录的软链接()test,并使用打开软链接(cd 2)并显示当前路径pwd。显示的路径是~/test/2,不是~/test/1

在 Windows 这样的操作系统中则不同,快捷方式将我们带到真实的目录。我有点困惑这个软链接在 Linux 中是如何工作的。这不是像中那样的快捷方式吗Windows?为什么路径不是~/test/1

 $ mkdir test
 $ cd test
 $ mkdir 1
 $ ln -s 1 2
 $ cd 2
 $ pwd
 /home/dazz/test/2

答案1

这是 shell 的一个功能,它会记住您是如何到达当前位置的。
如果您已经realpath安装,您可以执行以下操作:

$ realpath 
/home/dazz/test/1

如果你有 python,则缺少它:

$ python -c "import os; print(os.path.realpath('.'))"
/home/dazz/test/1

或 readlink (来自 coreutils):

$ readlink -f .
/home/dazz/test/1

/bin/pwd(不是 shell 内置的pwd):

$ /bin/pwd
/home/dazz/test/1

答案2

对比pwd/bin/pwd

pwd,这是许多 shell 中的内置命令,它告诉您 shell 认为您所在的位置(因此将符号链接“软链接”视为真正的目录。

/bin/pwd是一个外部程序,如果有必要,它可以通过遍历文件系统树来告诉您实际位置/。它不考虑符号链接,因为向上遍历时这些符号链接不存在..

答案3

其他答案已经涵盖了/bin/pwd与 shell 的builtin pwd.

如果您想遵循您提到的 Windows 风格的符号链接,请使用cd -P: 它将相应地更改 PWD 变量。

如果您想-P默认使用,您可以将此行添加到您的.bashrc.zshrc

set -P

其他外壳可能有所不同。

相关内容