2013-03-15 82 views
5

我有一個腳本(來自供應商,用於屏蔽密碼),它遍歷一系列用戶輸入,並根據輸入生成一些輸出。我希望能夠圍繞它來包裝另一個腳本,它從文本文件中提供輸入,然後捕獲輸出供以後使用。任何人都有這樣的例子嗎?如何從文本文件中向交互式bash腳本提供輸入

更新:我已經做了一些挖掘,事實證明shell腳本正在踢開一個java進程,這是請求用戶輸入。 xargs和<,>,|似乎沒有爲此工作。

+2

沒有足夠的答案內容,但請查看['expect'](http://expect.sourceforge.net/)。 – 2013-03-15 20:22:20

+3

您是否嘗試過正常的I/O重定向?根據腳本如何讀取輸入,有時候這可以起作用。 – 2013-03-15 20:25:43

回答

-1

約一個shell函數

function script_plus() 
{ 
    if [ $# != 2 ]; then echo "usage: ..."; exit; fi 
    src=$1; 
    tgt=$2; 
    if [ ! -f $src ]; then echo "usage: ..."; exit; fi 
    cat $src | xargs script > $tgt 
} 

如何假定 '腳本' 是你的供應商的腳本。沒有錯誤檢查(僅用於說明)。如果不是shell函數,則上述script_plus的正文可能是shell腳本文件的內容。

+1

你有一些代碼問題 - 例如,你需要'src',你需要''$ src「' - 但是更重要的是,我不認爲'script_plus FOO BAR'完全優於'script < FOO > BAR',我不認爲這是值得推薦的方法。 – ruakh 2013-03-15 20:29:25

+0

謝謝,用xargs修復。當需要使用錯誤/參數檢查來擴充腳本時,「值得推薦」當然會發生變化。輸入存在,例如。 – GoZoner 2013-03-15 20:31:49

+0

'xargs'絕對不是OP所需要的。現有的腳本不會將這些東西當作命令行參數;相反,它「通過一系列用戶輸入」。 – ruakh 2013-03-15 20:37:41

5

myscript <input_file> output_file(來自命令行)將會逐行讀取input_file,就好像它是用戶輸入一樣,然後將輸出寫入output_file。但要小心,如果output_file已經存在,它將被完全覆蓋而沒有任何警告。

+0

'<', '>'和'|'都是很好的工具。 'script1 | script2'將輸入'script1'並將其作爲輸入提供給'script2'。 – Lorkenpeist 2013-03-15 20:44:41

+0

'>>'是另一個有用的工具。 'myscript >> output_file'會將'myscript'的輸出附加到'output_file'的末尾。 – Lorkenpeist 2013-03-15 20:47:08

+0

感謝您的回覆。請參閱上述更新。它實際上是一個由shell腳本啓動的java進程。到目前爲止,這些建議沒有運氣。 – etsauer 2013-03-21 21:00:27

1

您可以嘗試expect程序,該程序可作爲大多數Linux發行版的軟件包提供。它使用簡單的腳本語言來提供交互式程序。一個示例腳本可以是這樣的:

#!/usr/bin/expect 
spawn passwordmanager 
expect "Enter password for testuser:" 
send "verysecret123" 

這個腳本會告訴expect啓動程序passwordmanager,然後等待提示Enter password for testuser:verysecret123等回答。