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

Я собираюсь назначить этот скрипт сочетанию клавиш, чтобы я мог быстро переключать Autohide для 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

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

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

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