解决符号链接(pwd)


32

说我执行以下操作:

cd /some/path
ln -s /target/path symbolic_name

如果是这样:

cd /some/path
cd symbolic_name
pwd

我得到:

/some/path/symblic_name

并不是:

/target/path

有没有办法让外壳“完全解析”一个符号链接(即更新CWD等),就像我直接完成的那样:

cd /target/path

我需要运行一些对我如何到达目标路径“似乎”或“敏感”的程序,并且我希望他们认为我到达目标路径就像cd /target/path直接完成一样。


7
这个问题有关。您可以pwd -P或者alias pwd='pwd -P'cd -P可以去物理路径而不是符号链接。
马丁·卡纳瓦尔

@MartínCanaval谢谢;那就是我想要的!
瑞安

Answers:


35

您的外壳程序有一个buildin pwd,它会变得“聪明”。cd对符号链接执行a之后,内部将pwd伪造输出,就像您移至真实目录一样。

-P选项传递给pwd,即运行pwd -P。该-P选项(用于“物理”)指示pwd不执行任何符号链接跟踪,并显示目录的“实际”路径。

另外,还应该有一个真正的二进制文件pwd,它不能(甚至不能做)这种魔术。只需使用该二进制显式:

$ type -a pwd
pwd is a shell builtin
pwd is /bin/pwd
$ mkdir a
$ ln -s a b
$ cd b
$ pwd
/home/michas/b
$ /bin/pwd
/home/michas/a

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.