【问题标题】:Why is my expect script failing on line 1? [closed]为什么我的期望脚本在第 1 行失败? [关闭]
【发布时间】:2011-05-29 04:31:18
【问题描述】:

我的期望脚本的第一行失败了。以下是我的脚本的全部内容,但它失败了:

#!/usr/bin/expect -f

它马上就失败了

": no such file or directory

作为我的回应。 Expect 实际上已安装并位于 /usr/bin/ 中,我从 root 运行它。 # 号之前我也没有多余的空格或行。当然,脚本最初还有更多内容,但在得到好东西之前就失败了。

【问题讨论】:

  • 如果你删除了除了shebang行之外的所有内容,它仍然会失败并出现同样的错误吗?
  • 是的。我将它减少到一行,但它失败了。
  • 我从另一台服务器复制了这个,另一台服务器能够完美地执行这个脚本。两者都在运行 Ubuntu Hardy。

标签: bash expect bin


【解决方案1】:

试了一下,结果如下:/usr/bin/expect^M: bad interpreter

是否有可能有一个 Windows 换行符(^M)使脚本混乱?您可以尝试od 来查看expecttofromdos 或编辑器(例如 emacs 在 hexl 模式)之后的换行符以将其删除.有关详细信息,请参阅手册页。

【讨论】:

  • 叮!叮!叮!我们有一个赢家。即使我使用 nano 输入此文件,它也将文件保存在 MSDOS 模式下。重新开始,它似乎解决了问题。
【解决方案2】:

我遇到了这个问题,发现我没有安装期望的解释器!奇怪的是,如果您在 shell 中运行该命令,它就可以工作。但是,通过一个 shell 脚本我得到了这个错误:

/usr/bin/expect: bad interpreter: No such file or directory

我通过简单地安装 Expect 解释器来修复它。选择的包名称是:expect libtcl8.6

只要运行:

sudo apt-get install expect

【讨论】:

  • 不幸的是,我得到了spawn: command not foundsend: command not found。我还尝试使用 sudo zypper install expect (在 OpenSuse 上)安装 expect,但它告诉我 'expect' is already installed.
【解决方案3】:

你的行尾是错误的。通过dos2unixtr -d '\r' 推它。

【讨论】:

    【解决方案4】:

    老实说,我真的不知道期望,但是当我在我的系统上运行它时,它“工作”很好。什么都没有发生,但这就是我所期望的。我没有收到任何错误消息。根据手册页,

    #!/usr/bin/expect -f
    

    是启动脚本的正确方法。然后,Expect 将您正在执行的脚本作为 cmdfile 下载。

    我让它重现问题的方法实际上是在行尾放置一个^M,而不是正常的换行符(看到Bert F's response,这促使我尝试它)。我确信 vim 的 :set list 命令会显示任何奇怪的字符。

    【讨论】:

      【解决方案5】:

      如果您观察到错误,则添加了一个 windows 换行符,因为它是通过邮件或 winscp 从 windows 机器复制的。所以为了避免这个错误,将使用 scp linux 的脚本复制到 linux 并执行脚本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-07
        • 1970-01-01
        • 2016-09-06
        • 1970-01-01
        相关资源
        最近更新 更多