Простой сценарий Bash для установки всех средств запуска (*.desktop) на исполняемый файл не работает

Надеясь кто-то более умный, чем я может помочь мне...

Средства запуска на моем рабочем столе (.desktop) файлы теряют разрешение быть исполняемым файлом каждый раз, когда я вношу существенные изменения в свою ОС, такие как мое обновление 18,04 (Бионический Бобр) или изменяющийся менеджер по работе с окнами (Gnome). После этих изменений, дважды щелкающий по каждому значку, обеспеченному файлом средства запуска, например, audacity.desktop результаты во всплывающем окне сообщения, запрашивающем, чтобы я "Доверял и Запустил" приложение. Очень неудобный для меня, потому что у меня есть загрузки средств запуска, хорошо организованных в различных папках на рабочем столе на основе того, что я могу разрабатывать (Дизайн веб-сайта по сравнению с печатной настольной издательской системой или мультимедийным редактированием и созданием DVD, и т.д.) Мне не придется открыть каждое приложение от средств запуска, нажать "Trust and Launch", затем закрыть его только, чтобы удостовериться, что это работает позже, когда мне действительно нужен он. Поэтому я записал простой сценарий 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

Копирование команда выше и выполнение его отдельно имеет желаемый эффект, в этом случае, запуски смелости как "Доверие и Запуск", но необходимость выполнить каждую команду в в cli каждое средство запуска еще менее удобна, чем просто двойной щелчок по каждому значку средства запуска и затем нажатие на "Trust and Launch"... назад к квадратному!Примечание: Имена файлов должны быть заключены в кавычки, потому что некоторые приложения, такие как gedit имеют средства запуска как "текст Editor.desktop" с пробелами в них.

Я не понимаю, почему я могу заставить сценарий печатать корректную команду для "Доверия и Запуска" на каждом *.desktop средстве запуска, но Bash отказывается на самом деле выполнять их (после того, как, удаляя команду эха). Я никогда не видел ничего как этот прежде, моделирование, но фактический сценарий последовательно перестал работать.

На помощь!

Заранее спасибо

2
задан 21 March 2019 в 03:16

1 ответ

Как @nosklo указанный, удаляя обратные косые черты будет работать.

Вам не нужны обратные косые черты, прежде чем двойные кавычки раньше определяли переменную, которая может содержать пробелы.

Кроме того, echo для команды действительно нужны обратные косые черты, но Ваш сценарий удара не делает.

#!/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

Однако это не сделает файлы "доверяемыми".

1
ответ дан 2 December 2019 в 04:38

Другие вопросы по тегам:

Похожие вопросы: