我的期望脚本的第一行失败了。这是我的脚本的全部内容,但它失败了:
#!/usr/bin/expect -f
它马上就失败了
": no such file or directory
作为我的回应。Expect 实际上已安装并位于 /usr/bin/ 中,我从 root 运行它。# 号之前我也没有多余的空格或行。当然,最初的脚本还有更多内容,但在得到好东西之前它就失败了。
试了一下,结果如下:
/usr/bin/expect^M: bad interpreter
是否有可能有一个 Windows 换行符 (the ^M
) 使脚本混乱?您可以尝试od
查看expect
and tofromdos或编辑器(例如hexl 模式下的emacs )之后的换行符以将其删除。有关更多信息,请参见手册页。
我遇到了这个问题,发现我没有安装期望的解释器!奇怪的是,如果您在 shell 中运行该命令,它就可以工作。然而,通过一个shell脚本我得到了这个错误:
/usr/bin/expect: bad interpreter: No such file or directory
我通过简单地安装 Expect 解释器来修复它。选择的包名是:expect libtcl8.6
赶紧跑:
sudo apt-get install expect
你的行尾是错误的。将其推过dos2unix
或tr -d '\r'
。
老实说,我真的不知道期望,但是当我在我的系统上运行它时,它“工作”很好。什么都没有发生,但这就是我所期望的。我没有收到任何错误消息。根据手册页,
#!/usr/bin/expect -f
是启动脚本的正确方法。然后,Expect 将您正在执行的脚本作为 cmdfile 啜饮。
我让它重现问题的方法实际上是^M
在行尾放置 a 而不是正常的换行符(看到Bert F 的响应,这促使我尝试它)。我确信 vim 的:set list
命令会显示任何奇怪的字符。
如果您观察到错误,则添加了一个 windows 换行符,因为它是通过邮件或 winscp 从 windows 机器复制的。因此,为避免此错误,将使用 scp linux 的脚本复制到 linux 并执行该脚本。