如何使用 bash 命令作为自定义快捷方式?

如何使用 bash 命令作为自定义快捷方式?

我有一个打开/关闭触摸板的命令(在终端中有效):

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'

相关内容