我打算将此脚本分配给键盘快捷键,以便我可以为 Docky 快速切换自动隐藏。
我将制作第二个脚本,再次关闭自动隐藏,并为其分配不同的键盘快捷键。
关闭并重新启动 Docky 的原因是因为 Docky 否则不会刷新配置的设置。我写了一个sudo命令,我怀疑它不起作用。
我想要:
sudo命令即可执行#!/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)
好吧,首先,你杀死了错误的程序。你的脚本有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的当前状态Autohide。grep只有匹配 时才会成功None。如果是,则将其设置为Intellihide并且如果不,它被设置为None
请注意,&&与 不一样&。&如上所述,将命令发送到后台,除非您想向后台发送某些内容,否则不需要。有关各种 shell 操作符的更多详细信息,请参阅此处。