9

基本思想是我想链接到相对于 $HOME 的路径,而不是显式扩展 $HOME 变量,因为我想确保链接在多台机器上工作,例如,

当我做

ln -s ~/data datalnk

我希望它被定向到具有用户的/home/user/data一台机器上的目录,以及具有用户$HOME的另一台机器上的目录。/home/user/home/machine/user/data$HOME/home/machine/user/data

我无法使用在第二台机器上创建符号链接

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

因为我没有这样做的权限,而且我不能link相对路径,因为两台机器有不同的目录层次结构。

关于解决或规避此问题的可能方法的任何想法?

编辑:

我真正想要做的是使相同的链接在两个机器上工作,其中目标具有相同的目录,仅就它们到 $/HOME 的相对路径而言,而不是它们的绝对路径,而不是它们到链接的相对路径任何一个。

4

3 回答 3

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”)。可以看出,文件系统只是不理解~.

快乐盛。

于 2011-10-27T17:47:22.453 回答
2

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

您可以构建一个脚本以将指向适当目录的链接放在适当的位置,但最好的方法取决于您的应用程序。

于 2011-10-27T17:37:14.150 回答
1

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

例如:

cd
ln -s data datalnk

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

您还没有真正说出您要完成的工作,因此我无法确定我是在解决您的问题还是建议您需要以不同的方式解决问题。

于 2011-10-27T17:35:50.977 回答