我们可以在符号链接中使用$ HOME或其他环境变量吗?
我知道使用相对路径../../.config
,但有时会遇到很多../
:) ~/.config
之类的东西会更舒服,或者使用$ HOME。
编辑:
habbie回答psmears的评论是答案,对不起,我的问题不完整。
虽然(如其他答案所示)你可以在创建符号链接时使用环境变量(与任何shell命令一样!),你实际上在符号链接本身中不能有环境变量(或'〜')引用
答案 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