如何创建相对于工作目录工作的符号链接

如何创建相对于工作目录工作的符号链接

考虑以下 :

x/
    ph/
        file1.txt -> ./../file1.txt
    file1.txt
y/
    ph/ -> /x/ph/ (this is full absolute path of x/ph)
    file1.txt

/y/ph是.ph中文件夹的符号链接,是相对符号链接。xfile1.txt

它在文件夹中正常工作x,但是如果你打开 /y/ph/file1.txt而不是打开/y/file1.txt它会打开/x/file1.txt

这里的目标是在多个地方拥有相同的目录(比如说一个程序)并具有不同的配置文件,而不必拥有该程序的多个副本。

根据ln的帮助

符号链接可以保存任意文本;如果稍后解析,则相对链接将根据其父目录进行解释。

所以相对链接是相对于实际文件夹的路径而不是当前工作目录。问题是 :有没有什么办法可以解决这个问题?

测试用例:

mkdir x y x/ph
echo x1 > ./x/file1.txt
echo y1 > ./y/file1.txt
ln -s $(pwd)/x/ph ./y/ph
cd ./x/ph
ln -s ./../file1.txt
cd ../..
cat ./x/ph/file1.txt
cat ./y/ph/file1.txt

预期结果是,x1 y1但你得到x1 x1

编辑:

为了使问题更清楚,请在一个空文件夹中运行测试用例。并在文件夹中尝试以下命令:

bor@borpc:~/tmp$ readlink -f ./x/ph/file.txt
/home/bor/tmp/x/ph/file.txt
bor@borpc:~/tmp$ readlink -f ./y/ph/file.txt
/home/bor/tmp/x/ph/file.txt
--------------^

我希望xy。那就是使相对符号链接基于pwd(当前工作目录或用于访问它的路径)而不是实际文件的实际路径进行解析。

如果可能的话,如何实现这种行为。

答案1

我有点困惑。你可能要创建一个从根目录(我的意思是/)开始的符号链接。例如,

ln -s /root/try/d s

ls -l  
total 0  

-rw-r--r-- 1 root root  0 Apr 24 16:15 d  
lrwxrwxrwx 1 root root 11 Apr 24 16:18 s -> /root/try/d  

答案2

您无法使用符号链接执行此操作。符号链接无法以这种方式工作。相对符号链接将相对于链接文件本身,而不是您所在的路径。

不过,你可以用以下方法实现类似的效果:绑定安装

[you@example example]$ mkdir x y x/ph y/ph
[you@example example]$ echo x1 > ./x/file1.txt
[you@example example]$ echo y1 > ./y/file1.txt
[you@example example]$ sudo mount --bind ./x/ph ./y/ph
[you@example example]$ cd ./x/ph
[you@example ph]$ ln -s ../file1.txt
[you@example ph]$ cd ../..
[you@example example]$ cat ./x/ph/file1.txt
x1
[you@example example]$ cat ./y/ph/file1.txt
y1

相关内容