在 Ubuntu 的“打开方式”列表中添加复杂的启动器

在 Ubuntu 的“打开方式”列表中添加复杂的启动器

我有一个复杂的快捷方式/启动器,我想将其放入打开方式列表中。快捷方式使用命令

screen -d -m bash -c "screen;source /home/me/intel/bin/compilervars.sh intel64;/home/me/QtCreator/QtCreator2.8.1-gcc/bin/qtcreator"

它之所以这么复杂是因为它必须执行英特尔编译器的脚本。我尝试将命令更改为

screen -d -m bash -c "screen;source /home/me/intel/bin/compilervars.sh intel64;/home/me/QtCreator/QtCreator2.8.1-gcc/bin/qtcreator %F"

然后将 QtCreator.desktop 文件复制到 /use/share/applications/,但没有作用。

我该怎么办?我阅读了很多关于此的教程,但我认为这个奇怪的启动器命令有一个特殊情况。

谢谢。

答案1

解决方案

您的桌面条目中的行值Exec应如下所示:

screen -d -m bash -c "screen;source /home/me/intel/bin/compilervars.sh intel64;/home/me/QtCreator/QtCreator2.8.1-gcc/bin/qtcreator \"\$@\"" dummy %F

screen;顺便问一下:为什么在 bash 命令字符串的开头有?如果我没记错的话,那应该没有必要。

我还应该提到,我已经使用以下Exec命令成功测试了这一点,因为我这里没有 QtCreator:

screen -d -m bash -c "libreoffice --writer \"\$@\"" dummy %F

解释

由于这里涉及很多“层次”,因此有点难以

  1. 正确地将参数从启动器传递给 QtCreator。
  2. 得到正确的引用。

让我们从第一个问题开始:您不能在启动器的命令%F中使用参数(即在引号内) ,请参阅Exec此规格页的最后一行其中写道:

%F 和 %U 字段代码只能单独用作参数。

因此,您必然会将启动器参数(即%F)作为最外层“层”上的参数。但您想将它们放入小 bash 命令中。幸运的是,bash 将其-c选项的第一个参数之后的所有参数用作位置参数。不幸的是,bash 从 0 开始对它们进行编号,即它使用$0$1$2等。因此,您不能$@在脚本中使用 访问它们所有,因为$0那样的话您会错过第一个( )参数。这就是我添加参数的原因dummy:它始终被分配给 ,$0在我们的例子中从未使用过。所有真实参数(即%F)都完全传递到$@

太好了,我们解决了第一个问题:我们设法将所有命令行参数从启动器放入小 bash 命令中。

现在来谈谈引用的问题。bash 命令周围的双引号由启动器解释。因此,这些引号之间的所有内容都必须遵守桌面入口规范在普通的 bash 脚本中,(缩短的)调用将如下所示:

qtcreator "$@"

因为每个参数都可以包含空格,所以我们必须用引号括住$@变量。现在,Exec关键规范要求(除其他外),如果在双引号内使用双引号和美元符号,则需要用引号括住它们 - 这正是我们所做的。第二个问题也解决了。

相关内容