Ame*_*ina 43 symlink files cwd
假设我执行以下操作:
cd /some/path
ln -s /target/path symbolic_name
Run Code Online (Sandbox Code Playgroud)
如果那么做:
cd /some/path
cd symbolic_name
pwd
Run Code Online (Sandbox Code Playgroud)
我得到:
/some/path/symblic_name
Run Code Online (Sandbox Code Playgroud)
并不是:
/target/path
Run Code Online (Sandbox Code Playgroud)
有没有办法让shell“完全解析”一个符号链接(即更新CWD等),就好像我已经直接做了:
cd /target/path
Run Code Online (Sandbox Code Playgroud)
?
我需要运行一些似乎“知道”或“敏感”我如何到达目标路径的程序,我希望他们认为我到达目标路径就像cd /target/path
直接完成一样。
mic*_*has 57
你的 shell 有一个 builtin pwd
,它试图变得“聪明”。在您对cd
符号链接执行a 之后,内部会pwd
伪造输出,就像您移动到真实目录一样。
将-P
选项传递给pwd
,即运行pwd -P
。该-P
选项(用于“物理”)告诉pwd
不要进行任何符号链接跟踪并显示目录的“真实”路径。
或者,也应该有一个真正的 binary 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
Run Code Online (Sandbox Code Playgroud)
liv*_*ato 15
试试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
Run Code Online (Sandbox Code Playgroud)
您还可以使用set -o physical
使此行为在正在运行的 shell 的整个生命周期中持续存在。
查看/sf/ask/731974911/以获得更多好的信息。