为什么我的预期脚本在第1行失败?

时间:2010-12-22 02:33:50

标签: bash expect bin

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

#!/usr/bin/expect -f

它随着

而立即失败
": no such file or directory

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

5 个答案:

答案 0 :(得分:17)

  

尝试过,结果如下:/ usr / bin / expect ^ M:糟糕的翻译

是否有可能在那里出现令人困惑的脚本的Windows换行符(“^ M”)?您可以尝试“od”查看“expect”和“tofromdos”之后的换行符或者编辑器(例如,在hexl模式下的emacs)以删除它。有关详细信息,请参见手册页。

答案 1 :(得分:9)

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

答案 2 :(得分:9)

我有这个问题,发现我没有安装期望的解释器!奇怪的是,如果你在shell中运行命令就可以了。但是,通过shell脚本我得到了错误: / usr / bin / expect:错误的解释器:没有这样的文件或目录

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

跑步:

sudo apt-get install expect

答案 3 :(得分:1)

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

#!/usr/bin/expect -f

是启动脚本的正确方法。然后,期望将您正在执行的脚本作为cmd文件填充。

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

答案 4 :(得分:0)

如果您看到此错误,则添加了Windows换行符,因为它是通过邮件或winscp从Windows机器复制而来的。因此,为避免此错误,请使用scp linux将脚本复制到linux并执行脚本。它为我工作。谢谢