将所有启动器 (*.desktop) 设置为可执行的简单 Bash 脚本不起作用

将所有启动器 (*.desktop) 设置为可执行的简单 Bash 脚本不起作用

希望比我聪明的人可以帮助我......

每次我对操作系统进行重大更改(例如升级到 18.04(Bionic Beaver)或更改窗口管理器(Gnome))时,桌面上的启动器(.desktop)文件都会失去可执行权限。进行这些更改后,双击启动器文件(例如 audacity.desktop)提供的每个图标,会弹出一条消息,要求我“信任并启动”该应用程序。这对我来说非常不方便,因为我根据可能正在开发的内容(网站设计与印刷桌面出版或多媒体编辑和 DVD 创建等)在桌面上的各个文件夹中组织了大量启动器。我不应该从启动器打开每个应用程序,单击“信任并启动”,然后关闭它,以确保它在我真正需要时可以正常工作。因此,我编写了一个简单的 BASh 脚本来处理给定文件夹中的所有启动器,从 ~Desktop/ 文件夹本身开始,但出于某种奇怪的原因,它就是不起作用!这是我的无法正常工作的生产脚本:

#!/bin/sh
for myDesktop in $HOME/Desktop/*.desktop
do /usr/bin/gio set \"$myDesktop\" \"metadata::trusted\" "yes"
done

我最终得到了这些错误而不是期望的结果:

gio: Too many arguments
Usage:
  gio set [OPTION…] LOCATION ATTRIBUTE VALUE...
Set a file attribute of LOCATION.
Options:
  -t, --type=TYPE             Type of the attribute
  -n, --nofollow-symlinks     Don’t follow symbolic links
[2]+  Done                    for myDesktop in $HOME/Desktop/*.desktop;
do
    /usr/bin/gio set \"$myDesktop\" \"metadata::trusted\" "yes";
done

下面是我的模拟脚本,它通过回显产生所需的输出,也就是说,每个启动器所需的命令只是打印出来,而不是执行:

#!/bin/sh
for myDesktop in $HOME/Desktop/*.desktop
do echo /usr/bin/gio set \"$myDesktop\" \"metadata::trusted\" "yes"
done

我的模拟创建的命令会根据需要正确打印每个启动器的所有命令,例如:

/usr/bin/gio set "/home/bruce/Desktop/audacity.desktop" "metadata::trusted" yes

复制上述命令并单独运行它可以达到预期的效果,在这种情况下,audacity 将作为“信任并启动”启动,但必须在每个启动器上的 cli 上运行每个命令,这比双击每个启动器图标然后单击“信任并启动”还要不方便...回到原点! 注意:必须用引号引起文件名,因为某些应用程序(例如 gedit)具有带有空格的启动器,如“Text Editor.desktop”。

我不明白为什么我可以让脚本在每个 *.desktop 启动器上打印“信任并启动”的正确命令,但 BASh 却拒绝实际运行它们(在删除 echo 命令后)。我以前从未见过这样的事情,模拟可以工作,但实际脚本始终失败。

帮助!

提前致谢

答案1

正如@nosklo 指出的那样,删除反斜杠就可以了。

用于定义可能包含空格的变量的双引号前不需要反斜杠。

此外,echo命令需要反斜杠,但是你的 bash 脚本才不是

#!/bin/bash
for myDesktop in $HOME/Desktop/*.desktop
do /usr/bin/gio set "$myDesktop" "metadata::trusted" "yes"
done

要验证您的更改,请运行以下命令:

gio info ~/Desktop/*.desktop | grep -P 'metadata|uri'

包含空格的文件将包含“%20”而不是上一个命令输出中的空格。

最后,注销然后重新登录以使更改生效。


另外,如果您只想将这些文件设置为可执行文件,那么您可以使用chmod如下命令:

#!/bin/bash
for i in ~/Desktop/*.desktop
do chmod +x "$i"
done

然而,这并不会使文件变得“可信”。

相关内容