符号链接中的环境变量

时间:2010-10-08 08:20:10

标签: linux unix shell

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

我知道使用相对路径../../.config,但有时会遇到很多../ :) ~/.config之类的东西会更舒服,或者使用$ HOME。

编辑:

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

虽然(如其他答案所示)你可以在创建符号链接时使用环境变量(与任何shell命令一样!),你实际上在符号链接本身中不能有环境变量(或'〜')引用

6 个答案:

答案 0 :(得分:39)

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

答案 1 :(得分:3)

即使符号链接由内核解决,您仍然可以执行LD_PRELOAD技巧,将所有使用路径名的libc函数包装起来,并在“ readlink”(参数扩展)返回的字符串中扩展任何$ XYZ组件。然后将扩展路径输入到包装函数中。正如jaztik所建议的那样,创建链接时,您必须从shell扩展中逃脱目标路径。

由于注入的库可以完全访问用户的环境,因此可以满足OP的所有期望。

答案 2 :(得分:2)

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

ln -s ~/test /tmp/test 

被解释为

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

阿。并且只有调用ln的人的环境变量才有效。您不能在链接中存储其他人的环境变量。在调用命令之前扩展变量。

答案 3 :(得分:2)

如果您不想在链接中展开变量,可以在其周围加上单引号,

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

这会给,

newname -> $HOME/file/or/folder

而不是将其扩展到本地设置的$ HOME。如其他答案中所述,它根本不会扩展它。所以你可以,例如使用它来符号链接到文字$HOME文件夹中的文件。

[注意这取决于系统 - 并非所有系统都支持变体符号链接]

答案 4 :(得分:0)

我能找到的最接近的是使用FUSE文件系统。使用fusepy编写自定义直通文件系统非常简单,它可以在确定要提供的真实文件时读取环境变量。当然,它只能获得安装直通系统的过程的环境变量,所以它没有那么有用。

答案 5 :(得分:-2)

是的,你可以。

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

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

export $MYPATH=/your/path