我可以在 .desktop 启动器中进行类似 bash 的命令替换吗?例如,与此类似的东西:
Exec=/some/prog --arg "$(zenity --entry)"
我的意思是“运行这个命令并将它的标准输出放在包含的命令行中,然后执行它”。
有没有办法在不制作单独的 bash 脚本文件的情况下做到这一点?我发现这个 hack (running bash -c '...'
) 可能有效,但也许有一种正确的方法可以做到这一点,比如一些 .desktop 特殊语法?
编辑:我刚刚发现 $(...) 在 .desktop 文件中正常工作......几乎。
我仍然有在替换命令中失败(非零退出代码)中止封闭命令的问题。我怎样才能做到这一点?我尝试分配一个变量,例如:
Exec= resp="$(zenity --entry)" && /some/prog --arg $resp
但它不起作用,因为当内部命令失败时,它不会中止,而是尝试将“&&”作为命令执行。
我最终不得不使用 bash -c。
这是正确处理带有故障支持的命令替换的方法,同时
%F
正确传递文件。我必须%F
在引号之外展开'...'
并将文件作为参数传递,然后在单引号内再次展开它们"$@"
,否则我无法正确处理每个路径上有空格的多个文件。