我可以在 .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