如何在 .desktop 文件中进行命令替换?

如何在 .desktop 文件中进行命令替换?

我可以在 .desktop 启动器中进行类似 bash 的命令替换吗?例如,类似于以下内容:

Exec=/some/prog --arg "$(zenity --entry)"

我的意思是“运行此命令并将其标准输出放在包含的命令行中,然后执行它”。

有没有办法不用创建单独的 bash 脚本文件来实现这一点?我发现这个黑客(运行bash -c '...')可能会有效,但也许有一个正确的方法来做到这一点,比如一些.desktop特殊语法?

编辑:我刚刚发现 $(...) 在 .desktop 文件中几乎可以正常工作。

我仍然遇到替换命令失败(非零退出代码)导致封闭命令中止的问题。我该怎么做?我尝试分配一个变量,例如:

Exec= resp="$(zenity --entry)" && /some/prog --arg $resp

但它不起作用,因为当内部命令失败时,它不会中止,而是尝试将“&&”作为命令执行。

答案1

我最终不得不使用 bash -c。

这是正确处理命令替换并支持失败,同时正确传递文件的方法%F。我必须在引号%F外展开'...'并将文件作为参数传递,然后在"$@"单引号内再次展开它们,否则我无法正确处理每个路径上都有空格的多个文件。

Exec= bash -c 'r=$(zenity --entry) && /some/prog --arg "$r" "$@"' "$0" %F

相关内容