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


19

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

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

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

2
感谢您删除屏幕截图。下次,请编辑您的问题,而不要删除并重新发布。删除太多自己的问题可能会被禁止提问。该禁令是自动的,因此我们将无能为力。无论如何,您都无需重新发布,因为编辑使问题更加棘手。
terdon

你为什么要问两次?askubuntu.com/q/610133/367165
AB

AB论坛吗?
DScript

Answers:


18

这是外壳程序的功能,可以记住您如何到达自己所在的位置。
如果已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

ls -l /proc/$$/cwd利用内核的/proc文件系统接口。
Bruce Ediger

8
还要注意pwd -P打印当前目录的物理而不是逻辑路径。
godlygeek

8

对比pwd/bin/pwd

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

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


6

其他答案涵盖了/bin/pwdvs shell的问题builtin pwd

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

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

set -P

其他外壳可能会有所不同。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.