我有一个打开/关闭触摸板的命令(在终端中有效):
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#-}
我想将其设置为自定义快捷方式。
我尝试使用sh -c
:
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#-}"
但它仍然无法正常工作 - 它只能打开触摸板。
我也尝试为变量添加引号("$param_name"
),但没有任何改变。
我哪里错了?
我不想创建任何包含该命令的脚本。
答案1
我试图调试该命令,因此我创建了一个包含该命令的脚本,使其可执行(chmod +x script.sh
)并运行调试模式:sh -x script.sh
。
我有:
+ param_name=TouchpadOff
+ synclient -l
+ awk -v param_name=TouchpadOff $1==param_name {print $(NF)}
+ touchpadoff_value=1
+ tmp_value = 1 - 1
mmm: 1: tmp_value: not found
+ synclient TouchpadOff=
并注意到这里的数学表达有问题。
因此,我将它 ( (( tmp_value = $touchpadoff_value - 1 ))
) 替换为let tmp_value=$touchpadoff_value-1
。
不幸的是,let
不适用于sh
,我使用了bash
,这是我粘贴为自定义快捷方式命令的工作解决方案:
bash -c "param=TouchpadOff; touchpadoff_value=$(synclient -l | awk -v param_name=$param '$1==param_name {print $(NF)}'); let tmp_value=$touchpadoff_value-1; synclient TouchpadOff=${tmp_value#-}"
答案2
您可以尝试创建别名。执行:man alias 以获得确切的帮助。它们可能位于:/home/[user]/.bashrc 可能有一个复杂的例子。一个简单的例子是:alias ll='ls -alF'