帮助 Docky 的 bash 脚本

Fik*_*dal 5 bash docky gconf

我打算将此脚本分配给键盘快捷键,以便我可以为 Docky 快速切换自动隐藏。

我将制作第二个脚本,再次关闭自动隐藏,并为其分配不同的键盘快捷键。

关闭并重新启动 Docky 的原因是因为 Docky 否则不会刷新配置的设置。我写了一个sudo命令,我怀疑它不起作用。

我想要:

  1. 无需任何sudo命令即可执行
  2. 如果可能(不重要),有一个统一的脚本,只在“无”和“智能隐藏”之间切换,这样我就不需要两个单独的键。
  3. 如果可能,让 Docky 刷新配置的值,而不必退出并再次启动。
#!/bin/bash 
gconftool-2 -t string -s /apps/docky-2/Docky/Interface/DockPreferences/Dock1/Autohide "Intellihide" & 
sudo killall dockey & 
docky
Run Code Online (Sandbox Code Playgroud)

ter*_*don 4

好吧,首先,你杀死了错误的程序。你的脚本有sudo killall dockey &但是你想杀掉docky,没有dockey。也就是说,绝对没有理由sudo,docky已被您的用户启动,因此您可以在没有任何特殊权限的情况下杀死它。您也不需要将其发送到后台(这就是&)。

您还没有解释为什么您的脚本不起作用,但可能发生的情况是您运行它但没有看到任何变化(请在提问时始终解释症状是什么)。这是因为您正在sudo ...使用 向后台发送命令&sudo需要密码:

$ sudo ls
[sudo] password for terdon: 
Run Code Online (Sandbox Code Playgroud)

因此,当您运行它时,它会提示您输入密码。由于您在后台运行它,因此您永远不会看到该提示,并且脚本将被卡住,等待您回答。

我不使用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
Run Code Online (Sandbox Code Playgroud)

&&换句话说,这AND意味着“仅当上一个命令成功时才运行下一个命令”。( ||)OR则相反,“如果上一个命令失败,则运行下一个命令。因此,上面的脚本将首先查询gconf的当前状态Autohidegrep只有匹配 时才会成功None。如果是,则将其设置为Intellihide并且如果不,它被设置为None

请注意,&&与 不一样&&如上所述,将命令发送到后台,除非您想后台发送某些内容,否则不需要。有关各种 shell 操作符的更多详细信息,请参阅此处