不扩展$ HOME或“〜”的符号链接?

基本的想法是,我想链接到相对于$ HOME的path,而不是明确地展开$ HOMEvariables,因为我想确保链接在多台机器上工作,例如,

当我做

ln -s ~/data datalnk 

我希望它被定向到/home/user/data目录/home/user/data ,其中有一个用户$HOME /home/user ,另一个机器上有/home/machine/user/data /home/machine/user/data

我无法在第二台机器上创build符号链接

 ln -s /home/machine/user /home/user 

因为我没有这个权限,所以我不能link相关path,因为这两台机器有不同的目录层次结构。

anyideas在可能的方式来解决或规避这一点?

编辑:

我真正想要做的是在两个通道上做同样的链接工作,目标只有相对于$ / HOME的path,而不是它们的绝对path,而不是通向链路的相对path无论是。

以这种方式使符号链接动态化的唯一方法是使用相对路径而不是绝对路径。 换句话说,不要用/开始你的路径。

例如:

 cd ln -s data datalnk 

在运行时,您的应用程序或脚本将需要引用~/datalnk$HOME/datalnk

你还没有真正说出你要完成的事情,所以我不能确定我是在解决你的问题还是在暗示你需要以不同的方式去解决问题。

泰勒,博士将无法正常工作

您可以使用单引号等转义机制将符号链接转换为符号链接:

 > cd ~ > echo hello > a > ln -s '~/a' b 

然而, ~是一个shell扩展 ,不被文件系统所理解(实际上,文件系统是“另一个字符”)。 这是一件好事 – 希望文件系统层了解环境变量,因为~通常由$HOME确定?

 > ls -lb lrwxrwxrwx 1 root root 3 Oct 27 17:39 b -> ~/a > ls b ls: b: No such file or directory 

您仍然可以 “手动”查看所述符号链接条目(如ls -l所做的那样),但是这必须由程序以非透明的方式完成(想象Windows中的“.LNK”)。 可以看出,文件系统只是不明白~

快乐的老师

首先:不能直接完成。 符号链接是纯文本文件,不会执行扩展。 如果你不能制定一个固定的相对或绝对路径到你所指的地方,你不能象征性地链接到它。

你可以建立一个脚本来把链接放到合适的目录中,但最好的方法取决于你的应用程序。