Помогите с bash скриптом для Docky
Я собираюсь назначить этот скрипт сочетанию клавиш, чтобы я мог быстро переключать Autohide для Docky.
Я собираюсь сделать второй сценарий, который снова отключает Autohide, и назначить ему другое сочетание клавиш.
Причина закрытия и повторного запуска Docky заключается в том, что Docky не обновляет параметры конфигурации в противном случае. Я написал sudo
команда, и я подозреваю, что это не сработает.
Я бы хотел:
- Сделать это без каких-либо
sudo
команда - Если это возможно (не важно), используйте один унифицированный скрипт, который просто переключается между "None" и "Intellihide", так что мне не нужно иметь два отдельных ключа.
- Если возможно, попросите 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
Обратите внимание, что &&
это не то же самое, что &
, &
отправляет команды в фоновый режим, как описано выше, и не требуется, если вы не хотите отправлять что-либо в фоновый режим. Более подробную информацию о различных операторах оболочки смотрите здесь.