Kik*_*ksy 7 shell bash path .desktop
我试图让一个 .desktop 文件运行一个与 .desktop 存储在同一目录中的 .sh。整个目录需要可移植并在机器之间移动。
我的运行脚本是 run.sh
我试过了:
[Desktop Entry]
Type=Application
Terminal=true
Name=RunMe
#Exec=sh -c "`dirname %k`/run.sh"
#Exec=bash -c "export PATH=$PATH:`dirname %k`; bash run.sh;"
#Exec=bash -c "export PATH=$PATH:`dirname %k`; sh run.sh;"
Exec=bash -c "export PATH=$PATH:`dirname %k`; run.sh;"
Run Code Online (Sandbox Code Playgroud)
但是当我双击 .desktop 文件时没有任何反应。如果我双击“run.sh”并选择“run”,脚本运行良好。如果我使用 ' sh run.sh'从命令行运行脚本,它工作正常。
任何想法,甚至只是如何调试它实际试图运行的路径?
根据桌面输入规范:
不能在带引号的参数中使用域代码
因此,你%k的字面意思是bash命令。将该Exec行更改为以下内容可避免这样做:
Exec=bash -c '"$(dirname "$1")"/run.sh' dummy %k
Run Code Online (Sandbox Code Playgroud)
以上在本地有效,如果路径中有空格也有效。dummy被赋予bash脚本作为它的$0(它认为脚本名称是什么),并且它%k的扩展可以作为$1. 引用的嵌套层是必要的,以符合规范并且是空间安全的。
请注意,%k它不一定会扩展到本地文件路径——它可以是一个 vfolder URI,也可以是空的,一个真正可移植的脚本也应该考虑到这些情况。%k本身也没有得到普遍支持,因此无论如何您都需要对希望使用它的系统进行一些限制。
就调试而言,您可以在 KDE 下使用普通的 shell 重定向:
Exec=bash -c ... > /tmp/desktop.log
Run Code Online (Sandbox Code Playgroud)
这不是标准化的行为,它在 GNOME 和其他可能的情况下不起作用。您还可以为精心制作的脚本提供绝对路径,以按照您需要的方式记录其参数和操作。
| 归档时间: |
|
| 查看次数: |
9972 次 |
| 最近记录: |