【问题标题】:Lubuntu: Using .sh script as a keybind, code works, executing script gives errorsLubuntu:使用 .sh 脚本作为键绑定,代码有效,执行脚本会出错
【发布时间】:2014-06-02 20:40:39
【问题描述】:

这是我第一次在 stackoverflow 上发帖,希望不要违反任何规则。我是一个完整的 Linux 新手(昨晚安装了 Lubuntu 14.04 64 位),所以请注意。

简而言之,我正在尝试让我的笔记本电脑触摸板切换开关工作(我的 Inspiron5110 上的 Fn+F3)。我有一个 bash 脚本:

#!/bin/bash
if [ $(synclient -l | grep TouchpadOff | awk '{print $3}') == 1 ] ; then
synclient touchpadoff=0;
else
synclient touchpadoff=1;
fi

我是从http://crunchbang.org/forums/viewtopic.php?id=10996 那里得到的。如果我将脚本代码粘贴到终端并执行它,它就可以工作(触摸板打开/关闭)。但是,我想将它绑定到一个键,所以在我的 lubuntu-rc.xml 我添加了以下内容:

<!-- disable touchpad -->
    <keybind key="XF86TouchpadToggle">
      <action name="Execute">
        <command>/usr/local/bin/touchpad.sh</command>
      </action>
    </keybind>

当我按下必要的组合键时,我得到了"Failure to execute child process "/usr/local/bin/touchpad.sh" (No such file or directory)"。但是我可以在这个目录中看到,无论是在文件管理器中,还是在终端中使用 ls 时,文件都在那里:

/usr/local/bin$ ls -l
total 4
-rwxrwxr-x 1 paspaldzhiev paspaldzhiev 145 юни  2 22:54 touchpad.sh

我使用chmod +x touchpad.sh 使其可执行。

现在,这变得更加令人困惑:

如果我使用bash /usr/local/bin/touchpad.sh,我会得到:

paspaldzhiev@areuexperienced:/usr/local/bin$ bash touchpad.sh
touchpad.sh: line 6: syntax error near unexpected token `fi'
touchpad.sh: line 6: `fi'

虽然我在上面说过,但我知道代码只要粘贴到终端就可以工作。

此外,如果我使用./touchpad.sh,我会得到:

paspaldzhiev@areuexperienced:/usr/local/bin$ ./touchpad.sh
bash: ./touchpad.sh: /bin/bash^M: bad interpreter: No such file or directory

请注意,我不太确定bash touchpad.sh./touchpad.sh 在执行方面有什么区别,只是我的更多精通Linux 的朋友告诉我尝试这些:D。

无论如何,我不知道以后该怎么做,谁能解释一下我做错了什么?

非常感谢!

【问题讨论】:

  • 以下内容看起来很奇怪:/bin/bash^M: bad interpreter: No such file or directory。确保该行上没有任何奇怪的转义字符。 /bin/bash 二进制文件没有 ^M 后缀
  • 上一个错误消息中的 ^M 是您的重要提示; -)。不知何故,您使用了 Windows 编辑器、文件传输或其他东西。试试dos2unix touchpad.sh。它将从行尾删除所有 CR (^M) 字符。它应该工作。祝你好运。
  • 成功了!我真的不记得了,但我在 Lubuntu 上都使用了 Leafpad 或 SublimeText3。总之,问题解决了,谢谢!!!为了避免再次出现这个问题,您建议我使用什么来编写 .sh 文件?
  • 大多数编辑器都有 'Unix' 文件模式。环顾四周。标准的 Unix 编辑器是“vi”,但它有一个陡峭的学习曲线,所以除非你对 Unix 脚本/编程做出真正的承诺,否则坚持你所知道的并学习你已经知道的工具中可用的选项。祝你好运。

标签: linux bash shell ubuntu key-bindings


【解决方案1】:

您最后一个错误消息中的 ^M 是您的重要提示; -)。不知何故,您使用了 Windows 编辑器、文件传输或其他东西。试试dos2unix touchpad.sh。它将从行尾删除所有 CR (^M) 字符。它应该工作。祝你好运。 – 脱壳者

【讨论】:

    【解决方案2】:

    不需要脚本,因为不需要if 指令。

    将这段代码放在你的 lubuntu-rc.xml 中

    <keybind key="XF86TouchpadToggle">
      <action name="Execute">
        <command>synclient TouchpadOff=$((1-$(synclient | grep TouchpadOff | awk '{print $3}')))</command>
      </action>
    </keybind>
    

    【讨论】:

      猜你喜欢
      • 2018-11-22
      • 1970-01-01
      • 2014-02-15
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      • 2011-10-01
      • 1970-01-01
      • 2012-06-29
      相关资源
      最近更新 更多