如何在 .desktop 文件的执行行中访问环境变量?

29

我的程序需要一个环境变量作为其中一个参数的一部分:

myprogram --folder=$HOME/.special

然而,如果我将这个命令放入一个 .desktop 文件的 exec 行中,它就无法工作:

Exec=myprogram --folder=$HOME/.special

$HOME 似乎解析为空。

1个回答

43

默认情况下,并非所有实现都会解析环境变量,但你可以改为执行sh,这将解析传递的环境变量。请注意,桌面规范还要求您使用反斜杠转义=和$字符。因此,你需要这样:

Exec=sh -c "myprogram --folder\=\$HOME/.special"

有关需要转义的所有字符的完整列表,请参见规范


3
当您的字符在字符串中时,您不需要转义任何字符。 - ggg
1
我需要尝试这个技巧,但我很喜欢它。这是规范的一个稍微更易读的版本,https://developer.gnome.org/desktop-entry-spec/#exec-variables。 - dragon788
2
这对我的用例非常完美,我的用例是在运行命令之前预先声明变量:Exec=sh -c "FOO='bar' /path/to/exec" - Alex Hart
1
您可以使用exec来避免额外的Shell进程运行:Exec=sh -c "exec myprogram --folder=$HOME/.special" - kelvin
2
它适用于Exec,但不适用于值PathIcon - Juan José Melero Gómez
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接