18

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

#!/usr/bin/expect -f

它马上就失败了

": no such file or directory

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

4

5 回答 5

24

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

是否有可能有一个 Windows 换行符 (the ^M) 使脚本混乱?您可以尝试od查看expectand tofromdos或编辑器(例如hexl 模式下的emacs )之后的换行符以将其删除。有关更多信息,请参见手册页。

于 2010-12-22T02:55:26.407 回答
19

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

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

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

赶紧跑:

sudo apt-get install expect
于 2016-11-18T21:48:07.930 回答
10

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

于 2010-12-22T02:35:24.913 回答
1

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

#!/usr/bin/expect -f

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

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

于 2010-12-22T03:00:23.153 回答
0

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

于 2020-12-01T11:30:06.073 回答