bash - 如何在 linux(True 或 False)bash 命令上设置切换?

标签 bash ubuntu trackpad

我目前指定了我的 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 = barfoo=barfoo=bar 是完全不同的语句,它们三个做的事情与另外两个不同。一定要认识到从这个例子中复制的不同之处。

关于bash - 如何在 linux(True 或 False)bash 命令上设置切换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28588147/

相关文章:

bash - 模拟 'named' 进程替换

bash - 逻辑运算符可以与 find 和 xargs 一起使用吗?

bash - 获取 HDFS 中最后更新的文件夹

jquery - 如何禁用(不滚动)左右触控板的移动。 (jQuery 滚动条)

javascript - onwheel 事件是由触控板滚动触发的吗

bash - Shell 脚本源 : Not Found

sql-server - ubuntu 上的 mssql 16-04

python - Ubuntu、 python : Cannot import python shapely package

java - 使用 java programmig 读取 Ubuntu 14.04 鼠标事件文件 (/dev/input/event3) 时出错

css - 正文 : overflow-x - still able to scroll over with trackpad