当我像这样交互式地使用 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
但我得到了同样的错误。
什么也没说。另一个屏幕(因为我使用的是“屏幕”命令)只在某个时候响应。谁知道为什么?
最佳答案
我希望你使用 ls
来代表其他东西,因为如果你只想要一个本地文件列表,你最好使用 glob
命令。当然,您实际上可能正在做类似的事情,也可以使用 screen -x
,但现在让我觉得有点过于复杂了。
可能的失败(虽然由于缺乏证据,我在黑暗中拍摄)可能是使用虚拟终端的各种事物之间的交互(期望和屏幕都这样做,而且没有那么多虚拟终端可用系统-wide)或由于没有足够的时间重新建立 session 连接而导致的某种计时问题。 (不过 10 次中有 9 次失败?那太多了。)如果是计时问题,在 500 之后插入一个 会有所帮助。如果是终端数量,那你就有问题了;也许可以使用
lsof
之类的工具来发现这一点,但是有很多事件部件,我不知道是什么地方出了问题。
关于linux - Expect 交互效果很好,但不是来自文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3747040/