期望以交互方式工作,但不是从文件

时间:2010-09-19 18:59:29

标签: linux bash ubuntu tcl expect

当我像这样交互式地使用期望时它很有效:

root@vagrantup:/home/vagrant> expect -i
expect1.1> spawn screen -x
spawn screen -x
3195
expect1.2> send "ls\n"
expect1.3> exit

但文件中使用的命令相同:

spawn screen -x
send "ls\n"
exit

有时仅有效,例如。每次执行文件时的1/10时间。这真的很奇怪。

我用这个命令执行文件:

expect -f Expectfile

我也测试了这些:

expect -b Expectfile
expect Expectfile

但我得到同样的错误。

它没有说什么。另一个屏幕(因为我正在使用“屏幕”命令)仅响应某个时间。谁知道为什么?

2 个答案:

答案 0 :(得分:4)

我希望您使用ls代替其他内容,因为如果您只想要本地文件列表,那么使用glob命令会好得多。当然,你实际上可能正在做类似的事情,使用screen -x也是如此,但现在让我觉得有点过于复杂了。

可能的失败(虽然我因为缺乏证据而在黑暗中拍摄)可能是使用虚拟终端的各种事物之间的互动(期望和屏幕都这样做,并且没有那么多虚拟终端可用系统 - 由于没有足够的时间重新建立会话连接而导致某种时间问题。 (虽然10次失败了9次?这很多。)如果是时间问题,插入after 500会有所帮助。如果是终端数,你就会遇到问题;也许有可能用像lsof这样的工具发现这个,但是有很多活动部件,我不知道什么是失败的。

答案 1 :(得分:1)

为什么呢?因为你误用了Expect。

我不相信stackoverflow线程是一个有效的媒介,可以教你对Expect的遗漏。一个更好的起点可能是这样的:为什么你认为你应该使用Expect?要在您尝试时自动执行屏幕,您可能更适合使用核心Tcl,而不是Tcl的Expect扩展。

屏幕很棒,Expect很棒,而且我总是支持自动化。你提出的特殊组合听起来比可能的保证更复杂。