Hashbang为Gnome .desktop文件

我希望能够添加#! 注释在我的.desktop文件的顶部,以便如果它具有执行权限并被执行,它将实际运行。 但是,我不知道.desktop文件的解释器是什么,所以我不知道要在hashbang中写入哪个/usr/bin/文件。 有任何想法吗?


编辑:

到目前为止,我已经创build了一个小的bash脚本execdesktop ,它可以执行桌面文件:

 `sed -nr 's/Exec=(.*)$/\\1/p' $1` 

如果我然后将以下内容添加到我的.desktop文件:

 #!/usr/bin/execdesktop 

然后它运行良好。 这种方法的工作原理,但我不希望使用它,因为它需要安装execdesktop。

您可以随时使用xdg-open作为您的shebang,如下所示:

 #!/usr/bin/env xdg-open 

这不会造成任何麻烦,因为#也会在.desktop文件中启动注释。

没有一个; .desktop文件不打算执行。 而是运行Exec键中给出的可执行文件。

只是为了明确,Ignacio 在这里是正确的.desktop文件不应该直接执行。 这是可能的(如你所发现的),但是不明智的。

另外请注意,不要使用xdg-open 。 如果有一个正确关联的MIME类型,它可能会正常工作,但这是不可靠的。

你应该使用gtk-launch 。 它使用如下:

 gtk-launch APPLICATION [URI...] gtk-launch app-name.desktop gtk-launch app-name 

这是男人的条目:

名称

  gtk-launch - Launch an application 

概要

  gtk-launch [APPLICATION] [URI...] 

描述

  gtk-launch launches an application using the given name. The application is started with proper startup notification on a default display, unless specified otherwise. gtk-launch takes at least one argument, the name of the application to launch. The name should match application desktop file name, as residing in /usr/share/application, with or without the '.desktop' suffix. If called with more than one argument, the rest of them besides the application name are considered URI locations and are passed as arguments to the launched application. 

请注意, gtk-launch需要安装.desktop文件(即位于/ usr / share / applications$ HOME / .local / share / applications中 )。

所以为了解决这个问题,我们可以使用一个黑客小小的bash函数,在启动之前临时安装所需的.desktop文件。 安装.desktop文件的“正确”方法是通过desktop-file-install但我将忽略这一点。

 launch(){ ( # where you want to install the launcher to appdir=$HOME/.local/share/applications # the template used to install the launcher template=launcher-XXXXXX.desktop # ensure $1 has a .desktop extension, exists, is a normal file, is readable, has nonzero size # optionally use desktop-file-validate for stricter checking # if ! desktop-file-validate "$1" 2>/dev/null; then if [[ ! ( $1 = *.desktop && -f $1 && -r $1 && -s $1 ) ]]; then echo "ERROR: you have not supplied valid .desktop file" >&2 exit 1 fi # ensure the temporary launcher is deleted upon exit trap 'rm "$launcherfile" 2>/dev/null' EXIT launcherfile=$(mktemp -p "$appdir" "$template") launchername=${launcherfile##*/} if cp "$1" "$launcherfile" 2>/dev/null; then gtk-launch "$launchername" "${@:2}" else echo "ERROR: failed to copy launcher to applications directory" >&2 exit 1 fi exit 0 ) } 

你可以像这样使用它(如果你愿意,还可以传递额外的参数或URI):

 launch ./path/to/shortcut.desktop 

或者,我在这里写了一个答案,概述了启动.desktop文件的所有方法。 它提供了一些替代gtk-launch可能有所帮助。