我有一个名为engine.bin
的Bourne-Again shell脚本文本可执行文件,我想要安装它。
如果我手动安装可执行文件./engine.bin
我得到一个屏幕,上面有我必须接受的EULA(通过按空格),然后通过写入yes
接受它,然后通过键入/usr/local/engine
来input安装path。
现在我想通过configuration脚本自动执行安装而无需手动交互 。 有没有办法做到这一点? 我不知道安装程序是否接受任何参数,不幸的是,这件事是无证的。
根据bill-agee和jgr208的建议,我写了下面这个为我工作的:
#!/usr/bin/expect -f set timeout -1 spawn /tmp/engine.bin expect { -gl "*Press SPACE or PAGE DOWN key to continue, U or PAGE UP key to scroll back*" { send -- " "; exp_continue } -gl "*yes/no*" } send -- "yes\r" expect -gl "*press ENTER to accept the default*" send -- "/tmp/tce\r" expect eof
如果可执行程序允许您在不等待每个单独提示出现的情况下对其进行垃圾邮件输入,则可以使用bash完成此操作。
例如,这个脚本将运行program_that_takes_several_lines_of_input.py
并发送四行输入 – 三个文本和一个空行:
#!/bin/bash -eux ./program_that_takes_several_lines_of_input.py <<EOD first line one enter keypress later yet another line of input after the empty line above EOD
如果您需要停下来等待每个提示出现,那么cram Python包可能非常适合这种情况 – 我发现它对于这样的任务非常有用,只需要发送几行输入,但是每行输入是不同的。
看到:
https://pypi.python.org/pypi/cram
期望也会起作用,但是我发现使用cram比Expect更快地达到工作解决方案。
pexpect是一个很好的选择! 看到: