【问题标题】:Automate installation of binary in linux在 linux 中自动安装二进制文件
【发布时间】:2016-08-18 22:18:04
【问题描述】:

我想要安装一个名为 engine.bin 的 Bourne-Again shell 脚本文本可执行文件。

如果我手动安装可执行文件./engine.bin,我会看到一个带有我必须接受的 EULA 的屏幕(通过按空格键),然后输入 yes 接受它,然后输入 /usr/local/engine 进入安装路径。

现在我想通过配置脚本自动进行安装无需手动交互。有没有办法做到这一点?我不知道安装程序是否接受任何参数,不幸的是没有记录。

【问题讨论】:

  • 如果环境中已经安装了expect 包,您可以使用它。如果不是,请告诉我,然后想出一些其他方法可以做到这一点。
  • 我可以安装 expect 并让它工作。
  • 很高兴听到!我本来可以回答的,但没有时间:(

标签: linux binary automation installation provisioning


【解决方案1】:

根据 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

【讨论】:

    【解决方案2】:

    如果可执行文件允许您在不等待每个单独的提示出现的情况下向其发送垃圾信息,您也许可以使用 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://bitheap.org/cram/

    https://pypi.python.org/pypi/cram

    Expect 也可以,但我发现使用 cram 比使用 Expect 更快地找到可行的解决方案。

    pexpect 也是一个不错的选择!见:

    https://pexpect.readthedocs.org/en/stable/

    【讨论】:

    • bash 解决方案不起作用,但我得到了它的期望。我会在下面写下答案。谢谢。
    猜你喜欢
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多