Справка по сценарию bash для Docky

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

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

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

Я хочу:

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

Ну, во-первых, вы убиваете неправильную программу. У вашего скрипта есть 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

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