如何将切换触控板开关的Bash命令设置为自定义快捷键?
如何将切换触控板开关的Bash命令设置为自定义快捷键?
嗨,我来帮你排查问题并解决这个快捷键设置的困扰~
你的核心问题出在双引号导致的变量提前展开上:当你用sh -c "..."时,当前shell会先解析命令里的$()和变量(比如$param_name、$touchpadoff_value),而不是把这些逻辑交给sh子shell去执行。这就导致你每次触发快捷键时,用的是第一次执行时获取的触控板状态值,而不是实时获取的状态,自然只能单向切换(比如只能打开)。
这里给你两种可行的解决方案,推荐第一种更简洁的:
方案1:用单引号包裹整个命令(推荐)
单引号会阻止当前shell解析内部的变量和命令替换,所有逻辑都会在sh子shell里执行,这样就能实时获取触控板状态了。注意要处理awk脚本里的单引号,用'\''来转义:
sh -c 'param_name=TouchpadOff; touchpadoff_value=$(synclient -l | awk -v param_name="$param_name" '\''$1==param_name {print $(NF)}'\''); (( tmp_value = touchpadoff_value - 1 )); synclient TouchpadOff=${tmp_value#-}'
方案2:转义所有需要延迟解析的符号
如果你坚持用双引号,需要把所有$符号转义(\$),让它们只在子shell里被解析:
sh -c "param_name=TouchpadOff; touchpadoff_value=\$(synclient -l | awk -v param_name=\"\$param_name\" '\$1==param_name {print \$(NF)}'); (( tmp_value = \$touchpadoff_value - 1 )); synclient TouchpadOff=\${tmp_value#-}"
验证步骤
- 先在终端里直接运行上面的命令,确认触控板能正常切换开/关
- 再把这个命令复制到自定义快捷键的命令输入框里保存即可
备注:内容来源于stack exchange,提问作者maciejwww
相关产品推荐
相关产品推荐

