解析符号链接(pwd)

解析符号链接(pwd)

假设我执行以下操作:

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

如果那么做:

cd /some/path
cd symbolic_name
pwd

我得到:

/some/path/symblic_name

并不是:

/target/path

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

cd /target/path

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

答案1

你的 shell 有一个内置的pwd,它试图变得“智能”。对符号链接执行操作后,cd内部pwd会伪造输出,就像您移动到真实目录一样。

将选项传递-Ppwd,即运行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

答案2

尝试cd -P <symlink_dirname>

tim@ls:~$ mkdir a
tim@ls:~$ ln -s a b

tim@ls:~$ cd b
tim@ls:~/b$ pwd
/home/tim/b

tim@ls:~/b$ cd ..
tim@ls:~$ cd -P b
tim@ls:~/a$ pwd
/home/tim/a

您还可以使用set -o physical使此行为在正在运行的 shell 的整个生命周期中持续存在。

查看https://stackoverflow.com/questions/10456784/behavior-of-cd-bash-on-symbolic-links以获得更多好信息。

相关内容