Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 符号链接,无需扩展$HOME或"~&引用;?_Linux_Bash_Shell_Admin_Ln - Fatal编程技术网

Linux 符号链接,无需扩展$HOME或"~&引用;?

Linux 符号链接,无需扩展$HOME或"~&引用;?,linux,bash,shell,admin,ln,Linux,Bash,Shell,Admin,Ln,基本思想是,我希望链接到相对于$HOME的路径,而不是显式扩展$HOME变量,因为我希望确保链接在多台机器上工作,例如 当我这样做的时候 ln -s ~/data datalnk 我希望它被定向到一台用户$home为/home/user的机器上的目录/home/user/data,以及另一台用户$home为/home/machine/user/data的机器上的/home/user/data 我无法使用在第二台计算机上创建符号链接 ln -s /home/machine/user /home/

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

当我这样做的时候

ln -s ~/data datalnk
我希望它被定向到一台用户
$home
/home/user
的机器上的目录
/home/user/data
,以及另一台用户
$home
/home/machine/user/data
的机器上的
/home/user/data

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

ln -s /home/machine/user /home/user
因为我没有这样做的权限,而且我不能链接相对路径,因为这两台机器有不同的目录层次结构

有什么办法可以解决这个问题吗

编辑:


我真正想做的是让同一个链接在两个macihne上工作,其中目标仅在其到$/HOME的相对路径上具有相同的目录,而不是绝对路径,也不是链接的相对路径

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

例如:

cd
ln -s data datalnk
在运行时,您的应用程序或脚本需要参考
~/datalnk
$HOME/datalnk


你还没有真正说出你想要完成什么,所以我真的不知道我是在解决你的问题,还是建议你用另一种方式解决问题。

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


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

tl,dr它不起作用。

您可以使用单引号等转义机制将
~
放入符号链接:

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


祝您愉快。

谢谢您的回复。我在问题中已经指出,相对路径似乎不起作用,因为链接和目标之间生成的相对路径深度不同。我真正想做的是让相同的链接在两个macihne上工作,其中目标只有在它们到
$/HOME
的相对路径上才有相同的目录。但是你真正想通过这个来实现什么呢?您想让用户选择将她/他的数据目录放在哪里,而不是强迫他们使用像
~/data
这样的特定位置吗?无论如何,您要将此符号链接放置在何处?它与其他用户无关。只是我在两台不同的机器上使用同一个hg存储库,我没有root权限,但我需要在两台机器上共享相同的数据,而不将它们包含在hg repo中(太大而无法放入)。我想我可以简单地将它们链接到HgRepo中,同时将链接放在Dropbox目录中,以便在hg之外同步它们。只是为了使两台机器上的工作流程无缝!有趣。您是否在包含
~/data
文件夹的同一用户帐户下运行它?我不明白为什么不让您的软件在启动时简单地展开
$HOME/data
。在这两种情况下,你都会得到正确的答案。这正是
$HOME
的用途。感谢您的解释。;-)实际上,“主目录”完全是一个用户空间概念。