![如何将 .desktop 文件中的“Path”变量设置为相对于桌面文件所在的位置?](https://linux22.com/image/1092879/%E5%A6%82%E4%BD%95%E5%B0%86%20.desktop%20%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9A%84%E2%80%9CPath%E2%80%9D%E5%8F%98%E9%87%8F%E8%AE%BE%E7%BD%AE%E4%B8%BA%E7%9B%B8%E5%AF%B9%E4%BA%8E%E6%A1%8C%E9%9D%A2%E6%96%87%E4%BB%B6%E6%89%80%E5%9C%A8%E7%9A%84%E4%BD%8D%E7%BD%AE%EF%BC%9F.png)
我想在 .desktop 文件中设置相对于桌面文件所在位置的“Path”变量,但我无法做到这一点。
当我不声明它或将其设置为空白时,无论我从哪里运行它,它都会默认为我的主文件夹;并且它不接受相对于文件系统中我当前位置的值。
答案1
您可以通过在 Exec 上使用内联 bash 小脚本来解决这个问题。这会在运行命令之前将 .desktop 文件的路径添加到 PATH。
Exec=bash -c "export PATH=$PATH:`dirname %k`; your_command"
%k 将被桌面文件本身的路径替换。该dirname
命令会删除文件名部分,只留下目录。一旦 PATH 被这样设置,your_command
就可以在不输入完整路径的情况下调用。
答案2
您无法在 .desktop 文件中设置 CWD。如果您希望某个应用程序具有特定的 CWD,则需要为该应用程序编写一个简单的包装器脚本,如下所示:
#!/bin/sh
(cd /where/you/want/it/to/be && exec your_program)
您可以将your_program
其替换为$@
,并以 your_program 作为参数运行脚本,例如run-in-dir.sh your_program
。这样,您可以使用相同的脚本来包装您想要在该目录中启动的任何程序。
答案3
我用的是这个:
Exec=bash -c 'cd $(dirname %k) && ./SCRIPT_NAME'
%k 是 .desktop 文件的全名(包括其路径)。然后 dirname 使用它来获取位置并将目录更改为该位置。最后,既然它位于正确的位置,它就会找到脚本并运行它。
答案4
这对我有用的Ubuntu 14.04:
Exec=bash -c "cd %k && ./app.run"
最新的规格说%千指向桌面文件的位置:
%k - 桌面文件的位置,可以是 URI(例如从 vfolder 系统获取)或本地文件名,如果不知道位置则为空。