我目前已经分配了我的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语句。
答案 0 :(得分:5)
大概是这样的:
#!/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 ]
。 (请注意,==
允许[[ ]]
,但纯POSIX shell上的[ ]
允许 ;这就是为什么最好不要在使用它的习惯)。请注意,空格在bash中很重要! foo = bar
,foo= bar
和foo=bar
是完全不同的陈述,所有这三种陈述都与其他两种陈述不同。一定要认识到从这个例子中复制的差异。
答案 1 :(得分: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)'
答案 2 :(得分: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