二進制的我有一個名爲engine.bin
,我要安裝的是Bourne Again Shell的腳本文本可執行文件。自動安裝在Linux
如果我安裝可執行手動./engine.bin
我獲得與EULA我有(通過推動空間)接受一個畫面,然後通過寫yes
接受它,然後鍵入/usr/local/engine
進入安裝路徑。
現在我想通過配置腳本自動執行安裝,無需人工交互。有沒有辦法做到這一點?我不知道安裝程序是否接受任何參數,不幸的是這件事沒有記錄。
二進制的我有一個名爲engine.bin
,我要安裝的是Bourne Again Shell的腳本文本可執行文件。自動安裝在Linux
如果我安裝可執行手動./engine.bin
我獲得與EULA我有(通過推動空間)接受一個畫面,然後通過寫yes
接受它,然後鍵入/usr/local/engine
進入安裝路徑。
現在我想通過配置腳本自動執行安裝,無需人工交互。有沒有辦法做到這一點?我不知道安裝程序是否接受任何參數,不幸的是這件事沒有記錄。
如果可執行文件允許你在它的垃圾郵件輸入,而無需等待每個單獨的提示出現,你也許可以使用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
如果你需要停下來等待每個提示出現,補習班Python包可能非常適合這種情況 - 我發現它適用於像這樣的任務,只需要發送幾行輸入,但每行輸入都不相同。
參見:
https://pypi.python.org/pypi/cram
預計也將工作,但我發現我達到工作方案有點快使用補習班比期待的時候。
pexpect是一個很好的選擇!請參閱:
bash解決方案不起作用,但我得到它與預期的工作,我會寫下面的答案,謝謝。 – dArignac
基於賬單阿吉和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
你可以使用'expect'包,如果已經安裝了在環境中。讓我知道如果它不是,然後生病想想你可以做到這一點的其他方式。 – jgr208
我能夠安裝期望,並得到它的工作。 – dArignac
很好聽!我會做出一個答案,但沒有時間:( – jgr208