我有一个命令来打开/关闭一个触摸屏(在终端中工作):
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"),但没有任何改变。
我哪里弄错了?我不想创建任何包含命令的脚本。
发布于 2023-05-07 03:01:22
我尝试调试这个命令,所以我创建了一个包含它的脚本,使它可以执行(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#-}"发布于 2023-05-07 04:09:53
你可以试着做个化名。男子化名,以获得帮助的确切方式。它们可能在:/home//..bashrc中,可能有一个复杂的例子。一个简单的方法是:别名ll='ls -alF‘
https://askubuntu.com/questions/1466917
复制相似问题