Jon*_*tte 6 bash symbolic-link
主持人:这不是重复!!!!请删除重复标记。
链接到的答案实际上并没有像公认的答案那样回答我的问题。谷歌只指出其他答案,这些答案实际上并不是这个特定问题的答案。
当跟随一个指向目录的符号链接时,bashshell 会试图制造符号链接是一个真实目录的错觉。但是,在很多情况下,这会崩溃。例如,考虑我可能有:
/usr/local/src/project-a-1.0/
/usr/local/src/project-b-2.2/
Run Code Online (Sandbox Code Playgroud)
然后,我的主目录中有一个符号链接:
ln -s /usr/local/src/project-a-1.0 ~/project
Run Code Online (Sandbox Code Playgroud)
现在,我想捷径与project-a:
cd ~/project
Run Code Online (Sandbox Code Playgroud)
到目前为止,一切都很好——但是 bash 假装我实际上在~/project,而不是在实际的工作目录中。它甚至在使用pwd内置时假装,但在使用/bin/pwd可执行文件时当然不是。
现在,如果我想在 中检出一个文件project-b,我可能想vim ../project-b<TAB>尝试使命令完成工作。但是,bash拒绝完成此操作,因为它认为这..是包含用户家的目录。
但是,如果我输入,vim ../project-b-2.2/somefile.txt那么效果很好,这正是我所期望的。
符号链接不是目录,由于 bash 中的这个错误功能,会发生各种不便甚至错误。我试图寻找一个选项来关闭它,但所有的谷歌和超级用户点击都只是关于“如何手动解析链接路径”——这不是我想要的;我希望 bash 停止尝试在我的文件系统之上模拟文件系统,这很糟糕。当然,是否存在某些选项可以将正确性置于幻觉之前?
“类似问题”弹出窗口指出了谷歌已经发送给我的另外两个问题;他们两个要求我的“-P”选项传递给pwd或者cd甚至建议使用readlink找出符号链接的目标。这根本不是我感兴趣的。我希望内置pwd和 shell 提示$PWD匹配getcwd()系统调用的物理输出;那些问题根本不谈这个。
-P如果设置,则在执行诸如
cd更改当前目录之类的命令时不解析符号链接 。而是使用物理目录。默认情况下,Bash 在执行更改当前目录的命令时遵循目录的逻辑链。例如,如果 /usr/sys 是指向 /usr/local/sys 的符号链接,则:
Run Code Online (Sandbox Code Playgroud)$ cd /usr/sys; echo $PWD /usr/sys $ cd ..; pwd /usr如果
set -P打开,则:Run Code Online (Sandbox Code Playgroud)$ cd /usr/sys; echo $PWD /usr/local/sys $ cd ..; pwd /usr/local
所以这应该会让你得到你想要的行为:
set -P
Run Code Online (Sandbox Code Playgroud)