Помогите с bash скриптом для Docky

Я собираюсь назначить этот сценарий сочетанию клавиш, чтобы быстро переключать режим автоматического скрытия для Docky.

Я собираюсь сделать второй сценарий, который снова отключает Autohide, и назначить ему другое сочетание клавиш.

Причина закрытия и повторного запуска Docky заключается в том, что Docky не обновляет параметры конфигурации в противном случае. Я написал команду sudo и подозреваю, что она не будет работать.

Я хочу:

  1. Делать это без какой-либо команды sudo
  2. Если это возможно (не важно), иметь один унифицированный скрипт, который просто переключается между " None "и" Intellihide ", так что мне не нужно иметь два отдельных ключа.
  3. Если возможно, попросите Docky обновить значения конфигурации, не выходя и не запуская снова.
#!/bin/bash 
gconftool-2 -t string -s /apps/docky-2/Docky/Interface/DockPreferences/Dock1/Autohide "Intellihide" & 
sudo killall dockey & 
docky
5
задан 16 October 2015 в 14:24

1 ответ

Ну, в первую очередь, Вы закрываете неправильную программу. Ваш сценарий имеет sudo killall dockey & но Вы хотите уничтожить docky, нет dockey. Тем не менее нет абсолютно никакой причины sudo, docky был запущен Вашим пользователем, таким образом, можно уничтожить его без любых специальных полномочий. Вы также не должны отправлять его в фон (это что & делает).

Вы не объяснили, почему Ваш сценарий не работает, но что, вероятно, происходит, то, что Вы выполняете его, и Вы видите, ничто произойти (всегда объясняют, что признаки при задавании вопросов). Это вызвано тем, что Вы отправляете sudo ... управляйте к фону с &. sudo ожидает пароль:

$ sudo ls
[sudo] password for terdon: 

Так, при выполнении его это обеспечит подсказку, просящую пароль. Так как Вы выполняете его в фоновом режиме, Вы никогда не будете видеть, что подсказка и сценарий застрянут, ожидая Вас для ответа.

Я не использую docky и я понятия не имею, можно ли сделать, это, не перезапуская его, но перезапуск, кажется, самая простая опция. Просто измените свой сценарий на:

#!/bin/bash

gconftool-2 --get  /apps/docky-2/Docky/Interface/DockPreferences/Dock1/Autohide | grep -q None &&
    gconftool-2 -t string -s /apps/docky-2/Docky/Interface/DockPreferences/Dock1/Autohide "Intellihide" ||
    gconftool-2 -t string -s /apps/docky-2/Docky/Interface/DockPreferences/Dock1/Autohide "None"    

killall docky && docky

&& средства AND, другими словами, "выполняет следующую команду, только если предыдущий был успешен". || (OR) противоположное, "выполните следующая команда, если предыдущий перестал работать. Так, сценарий выше сначала запросит gconf для текущего состояния Autohide. grep только будет успешно, если это будет соответствовать None. Если так, это установлено на Intellihide и в противном случае это установлено на None

Отметьте это && не то же как &. & отправляет команды в фон, как описано выше и не нужен, если Вы не хотите отправить что-то в фон. Для получения дополнительной информации на различных операторах оболочки, посмотрите здесь.

4
ответ дан 17 October 2015 в 00:24

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

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