2016-04-25 76 views
3

二進制的我有一個名爲engine.bin,我要安裝的是Bourne Again Shell的腳本文本可執行文件。自動安裝在Linux

如果我安裝可執行手動./engine.bin我獲得與EULA我有(通過推動空間)接受一個畫面,然後通過寫yes接受它,然後鍵入/usr/local/engine進入安裝路徑。

現在我想通過配置腳本自動執行安裝,無需人工交互。有沒有辦法做到這一點?我不知道安裝程序是否接受任何參數,不幸的是這件事沒有記錄。

+0

你可以使用'expect'包,如果已經安裝了在環境中。讓我知道如果它不是,然後生病想想你可以做到這一點的其他方式。 – jgr208

+1

我能夠安裝期望,並得到它的工作。 – dArignac

+0

很好聽!我會做出一個答案,但沒有時間:( – jgr208

回答

0

如果可執行文件允許你在它的垃圾郵件輸入,而無需等待每個單獨的提示出現,你也許可以使用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://bitheap.org/cram/

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

預計也將工作,但我發現我達到工作方案有點快使用補習班比期待的時候。

pexpect是一個很好的選擇!請參閱:

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

+0

bash解決方案不起作用,但我得到它與預期的工作,我會寫下面的答案,謝謝。 – dArignac

1

基於賬單阿吉和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