Надеясь кто-то более умный, чем я может помочь мне...
Средства запуска на моем рабочем столе (.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 отказывается на самом деле выполнять их (после того, как, удаляя команду эха). Я никогда не видел ничего как этот прежде, моделирование, но фактический сценарий последовательно перестал работать.
На помощь!
Заранее спасибо
Как @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
Однако это не сделает файлы "доверяемыми".