2010-10-08 76 views
12

我们可以在符号链接中使用$ HOME或其他环境变量吗?符号链接中的环境变量

我知道关于使用相对路径../../.config但有时是很多../ :)类似~/.config会更舒适,或使用$ HOME。

编辑:

habbie的回答与psmears'的评论是答案,对不起我的问题是不完整的。

虽然(如其他答案显示),您可以创建符号链接时,使用环境变量(如与任何shell命令!),你不能真正拥有环境变量(或“〜”)的符号链接本身

引用
+0

我希望这是可能的。一个用例:在〜/ bin目录中有一堆符号链接,指向克隆到'$ HOME/my_github_scripts'的个人git存储库中的脚本。你想从几个机器上的〜/ bin目录链接到这些脚本,但是你的用户名是不同的。所以你不想硬编码用户名(可能是我的家用计算机上的'/ home/joebloggs',但工作时是'/ home/jbloggs',甚至Mac上的'/ Users/joebloggs')。 – 2014-09-12 22:31:12

+0

如果想尝试异国情调,可以查看ROFS Filtered。 – 2016-01-17 14:08:08

回答

29

符号链接由内核处理,内核不关心环境变量。所以不行。

+10

不知道是谁在不留下评论的情况下改变了这一点 - 答案是正确的。虽然(正如其他答案所显示的),当*创建*符号链接时(与任何shell命令一样),您可以使用环境变量,但在符号链接本身中实际上不能包含环境变量(或'〜')引用。 – psmears 2010-10-08 08:30:13

+0

thx这是问题。 – kfl62 2010-10-08 08:56:02

+1

你能否通过任何机会链接内核中的相关源文件? – n611x007 2014-11-06 13:48:56

2

是的。没问题。实际上,您实际上不会在链接中使用$ HOME变量,因此它不适用于用户组的智能解决方案。执行该命令时,该变量由shell转换,变量的内容用于链接。

ln -s ~/test /tmp/test 

是用不了两年时间,以

/<path>/<to>/home/test -> /tmp/test 

啊。只有调用ln的人的环境变量才能工作。您不能在链接中存储其他人的环境变量。调用该命令之前,变量被展开。

+0

我刚在Centos盒子上试过,thomasmalt写的是正确的。该变量将在创建符号链接的位置进行翻译,并且如果更改环境变量将不会动态更新。 – kskjon 2010-10-08 08:33:14

-1

是的,你可以。

ln -s $HOME/file/or/folder newname 

您也可以设置自己的变量并使用它们。添加在你的.bashrc(或者.bash_profile中):

export $MYPATH=/your/path 
+0

检查thomasmalt的答案。你所说的本身是正确的,但问题是如何让环境变量存储在链接中,以便每次链接被执行时都会查阅环境(这是不可能的)。 – 2010-10-08 10:10:56

+1

我不认为这个回答真正理解了问题的背景。 – 2014-09-12 22:26:06

2

如果你不想扩大在链接的变量,你可以把它周围的单引号,

ln -s '$HOME/file/or/folder' newname 

这会给,

newname -> $HOME/file/or/folder 

,而不是把它扩大到你的本地设置$ HOME。

[注取决于系统 - 不是所有的系统都支持变型符号链接]

+0

我很好奇,如果你可以命名一个系统* * *? :) – conny 2011-09-25 15:37:56

+0

我似乎可以在OS X 10.9上做到这一点。 – JacobEvelyn 2014-06-11 20:31:10

+0

@JacobEvelyn刚刚在OS X 10.9上试过。它正确地将环境变量名称存储在链接中('/ tmp/currenthome - > $ HOME') - 但链接目标无法成功解析。 ('-bash:cd:/ tmp/currenthome:没有这样的文件或目录) – 2014-06-24 12:58:31

0

最近我已经能够使用FUSE文件系统来。使用fusepy来编写自定义直通文件系统非常简单,它可以在确定要提供的实际文件时读取环境变量。当然,它只能获得安装直通系统的进程的环境变量,所以它不如它有用。