基本思想是我想链接到相对于$ HOME的路径,而不是显式扩展$ HOME变量,因为我想确保链接在多台机器上工作,例如,
当我做的时候
ln -s ~/data datalnk
我希望将其定向到一台计算机上的目录/home/user/data
,该计算机的用户$HOME
为/home/user
,而另一台计算机上的/home/machine/user/data
则指向用户{ {1}}的{1}}。
我无法使用
在第二台机器上创建符号链接$HOME
因为我没有权限这样做,而且我不能/home/machine/user/data
相对路径,因为这两台机器有不同的目录层次结构。
关于修复或规避这种方法的可能方法吗?
编辑:
我真正想要的是让同一个链接在两个macihnes上运行,其中目标在它们相对于$ / HOME的相对路径方面具有相同的目录,而不是它们的绝对路径,而不是它们的相对路径到链接。
答案 0 :(得分:7)
tl,博士它将无效
您可以使用转义机制(如单引号)将~
转换为符号链接:
> cd ~
> echo hello > a
> ln -s '~/a' b
但是,~
是 shell扩展,文件系统无法理解(实际上,文件系统只是“另一个字符”)。这是一件好事 - 希望文件系统层了解环境变量,因为~
通常由$HOME
确定?
> ls -l b
lrwxrwxrwx 1 root root 3 Oct 27 17:39 b -> ~/a
> ls b
ls: b: No such file or directory
你可以仍然“手动”查看所述符号链接条目(与ls -l
一样),但这必须由程序以非透明方式完成(想到Windows中的“.LNK”。可以看出,文件系统只是不理解~
。
快乐的嘘声。
答案 1 :(得分:1)
以这种方式使符号链接动态化的唯一方法是使用相对路径而不是绝对路径。换句话说,请勿使用/
开始您的路径。
例如:
cd
ln -s data datalnk
在运行时,您的应用或脚本需要引用~/datalnk
或$HOME/datalnk
。
你还没有真正说出你想要完成的事情,所以我无法确定我是在解决你的问题还是建议你需要以不同的方式去解决问题。
答案 2 :(得分:1)
首先:不能直接完成。符号链接是纯文本文件,不执行扩展。如果你不能为你所指的地方制定固定的相对或绝对路径,你就不能象征性地链接到它。
您可以构建一个脚本,将链接放在适当位置的相应目录中,但最好的方法取决于您的应用程序。