DSc*_*ipt 19 shell cd-command symlink
我创建了一个指向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
Run Code Online (Sandbox Code Playgroud)
Ant*_*hon 19
这是 shell 的一个功能,它可以记住您是如何到达当前位置的。
如果您已经realpath安装,您可以执行以下操作:
$ realpath
/home/dazz/test/1
Run Code Online (Sandbox Code Playgroud)
如果你有 python,那就没有了:
$ python -c "import os; print(os.path.realpath('.'))"
/home/dazz/test/1
Run Code Online (Sandbox Code Playgroud)
或 readlink(来自 coreutils):
$ readlink -f .
/home/dazz/test/1
Run Code Online (Sandbox Code Playgroud)
或/bin/pwd(不是内置的外壳pwd):
$ /bin/pwd
/home/dazz/test/1
Run Code Online (Sandbox Code Playgroud)
对比pwd和/bin/pwd。
pwd,这是许多 shell 中的内置命令,它告诉您 shell 认为您在哪里(因此将符号链接视为“软链接”,就好像它们是真正的目录一样。
/bin/pwd是一个外部程序,它告诉你你的真实位置,如有必要,通过遍历文件系统树直到/. 它不考虑符号链接,因为它们在向上遍历时不存在..
其他答案涵盖了/bin/pwd与 shell 的builtin pwd.
如果您想遵循您提到的 Windows 样式中的符号链接,请使用cd -P: 它将相应地更改 PWD 变量。
如果要-P默认使用,可以将此行添加到您的.bashrc或.zshrc:
set -P
Run Code Online (Sandbox Code Playgroud)
其他外壳可能会有所不同。