没有扩展$ HOME或"〜"的符号链接?

nye*_*e17 8 linux bash shell admin ln

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

当我做

ln -s ~/data datalnk
Run Code Online (Sandbox Code Playgroud)

我希望它被引导到目录/home/user/data具有用户一台机器上$HOME/home/user,并/home/machine/user/data具有用户另一台机器上$HOME/home/machine/user/data.

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

ln -s /home/machine/user /home/user
Run Code Online (Sandbox Code Playgroud)

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

关于修复或规避这种方法的可能方法吗?

编辑:

我真正想要的是让同一个链接在两个macihnes上运行,其中目标在它们相对于$/HOME的相对路径方面具有相同的目录,而不是它们的绝对路径,而不是它们相对于链接的相对路径无论是.

小智 7

tl,博士它不会工作

您可以使用转义机制(如单引号)~ 进入符号链接:

> cd ~
> echo hello > a    
> ln -s '~/a' b
Run Code Online (Sandbox Code Playgroud)

然而,~是一个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 
Run Code Online (Sandbox Code Playgroud)

您仍然可以 "手动"查看所述符号链接条目(与完成时一样ls -l),但这必须由程序以非透明方式完成(在Windows中考虑".LNK").可以看出,文件系统只是不明白~.

快乐的shing.


pau*_*kow 1

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

例如:

cd
ln -s data datalnk
Run Code Online (Sandbox Code Playgroud)

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

您还没有真正说出您想要实现的目标,所以我无法真正判断我是在解决您的问题还是建议您需要以不同的方式解决问题。