我目前指定了我的 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 语句?
最佳答案
大概是这样的:
#!/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
是完全不同的语句,它们三个做的事情与另外两个不同。一定要认识到从这个例子中复制的不同之处。
关于bash - 如何在 linux(True 或 False)bash 命令上设置切换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28588147/