2

我目前分配了我的 thinkvantage 按钮来关闭点击以单击我的触控板,但我想将其转换为切换开/关开关。

目前,这是我用来关闭它(或使用 CTRL 开启)的 bash 命令:

gsettings set org.gnome.settings-daemon.peripherals.touchpad tap-to-click true
gsettings set org.gnome.settings-daemon.peripherals.touchpad tap-to-click false

换句话说,我如何将其变成条件切换开关 bash 语句?

4

3 回答 3

6

大概是这样的:

#!/bin/bash
class=org.gnome.settings-daemon.peripherals.touchpad
name=tap-to-click
status=$(gsettings get "$class" "$name")
status=${status,,} # normalize to lower case; this is a modern bash extension
if [[ $status = true ]]; then
  new_status=false
else
  new_status=true
fi
gsettings set "$class" "$name" "$new_status"

把它分解成碎片:

  • #!/bin/bash确保此脚本的解释器是 bash,从而启用扩展语法,例如[[ ]].
  • 语法$( )是“命令替换”;这会运行一个命令,并替换该命令的输出。因此,如果输出为true,则status=$(...)变为status=true
  • 参数扩展${name,,}扩展 的内容,name同时将这些内容转换为全小写,并且仅在较新版本的 bash 中可用。如果您想支持/bin/sh或更早版本的 bash,请考虑改为,或者如果输出始终为小写,则status=$(printf '%s\n' "$status" | tr '[:upper:]' '[:lower:]')只需删除此行。gsettings get
  • 比较[[ $status = true ]]依赖于 bash 扩展[[ ]](在其他现代 ksh 派生的 shell 中也可用)以避免引用。如果您希望它与 一起使用#!/bin/sh,则可以[ "$status" = true ]改用。(请注意,这是允许==的 inside [[ ]],但在纯 POSIX shell 中是不允许[ ]的;这就是为什么最好不要养成使用它的习惯)。

请注意,空格在 bash 中很重要!foo = barfoo= bar并且foo=bar是完全不同的语句,并且它们三个都做与其他两个不同的事情。一定要认识到从这个例子中复制的差异。

于 2015-02-18T16:16:38.173 回答
1

在 Ubuntu Unity 时钟上切换秒数(直接粘贴为键绑定命令):

bash -c 'gsettings set com.canonical.indicator.datetime show-seconds $(gsettings get com.canonical.indicator.datetime show-seconds | perl -neprint/true/?false:true)'

对于 GNOME:

bash -c 'gsettings set org.gnome.desktop.interface clock-show-seconds $(gsettings get org.gnome.desktop.interface clock-show-seconds | perl -neprint/true/?false:true)'

于 2016-12-19T18:08:06.947 回答
0

来源:https ://www.commandlinefu.com/commands/view/24256/toggle-the-touchpad-on-or-off

synclient TouchpadOff=$(synclient -l | grep -q 'TouchpadOff.*1'; echo $?)

或者

tp=$(synclient -l | grep TouchpadOff | awk '{ print $3 }') && tp=$((tp==0)) && synclient TouchpadOff=$tp
于 2021-01-05T12:14:12.933 回答