我有一個腳本(來自供應商,用於屏蔽密碼),它遍歷一系列用戶輸入,並根據輸入生成一些輸出。我希望能夠圍繞它來包裝另一個腳本,它從文本文件中提供輸入,然後捕獲輸出供以後使用。任何人都有這樣的例子嗎?如何從文本文件中向交互式bash腳本提供輸入
更新:我已經做了一些挖掘,事實證明shell腳本正在踢開一個java進程,這是請求用戶輸入。 xargs和<,>,|似乎沒有爲此工作。
我有一個腳本(來自供應商,用於屏蔽密碼),它遍歷一系列用戶輸入,並根據輸入生成一些輸出。我希望能夠圍繞它來包裝另一個腳本,它從文本文件中提供輸入,然後捕獲輸出供以後使用。任何人都有這樣的例子嗎?如何從文本文件中向交互式bash腳本提供輸入
更新:我已經做了一些挖掘,事實證明shell腳本正在踢開一個java進程,這是請求用戶輸入。 xargs和<,>,|似乎沒有爲此工作。
約一個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腳本文件的內容。
你有一些代碼問題 - 例如,你需要'src',你需要''$ src「' - 但是更重要的是,我不認爲'script_plus FOO BAR'完全優於'script < FOO > BAR',我不認爲這是值得推薦的方法。 – ruakh 2013-03-15 20:29:25
謝謝,用xargs修復。當需要使用錯誤/參數檢查來擴充腳本時,「值得推薦」當然會發生變化。輸入存在,例如。 – GoZoner 2013-03-15 20:31:49
'xargs'絕對不是OP所需要的。現有的腳本不會將這些東西當作命令行參數;相反,它「通過一系列用戶輸入」。 – ruakh 2013-03-15 20:37:41
myscript <input_file> output_file
(來自命令行)將會逐行讀取input_file
,就好像它是用戶輸入一樣,然後將輸出寫入output_file
。但要小心,如果output_file
已經存在,它將被完全覆蓋而沒有任何警告。
'<', '>'和'|'都是很好的工具。 'script1 | script2'將輸入'script1'並將其作爲輸入提供給'script2'。 – Lorkenpeist 2013-03-15 20:44:41
'>>'是另一個有用的工具。 'myscript >> output_file'會將'myscript'的輸出附加到'output_file'的末尾。 – Lorkenpeist 2013-03-15 20:47:08
感謝您的回覆。請參閱上述更新。它實際上是一個由shell腳本啓動的java進程。到目前爲止,這些建議沒有運氣。 – etsauer 2013-03-21 21:00:27
您可以嘗試expect
程序,該程序可作爲大多數Linux發行版的軟件包提供。它使用簡單的腳本語言來提供交互式程序。一個示例腳本可以是這樣的:
#!/usr/bin/expect
spawn passwordmanager
expect "Enter password for testuser:"
send "verysecret123"
這個腳本會告訴expect
啓動程序passwordmanager
,然後等待提示Enter password for testuser:
與verysecret123
等回答。
沒有足夠的答案內容,但請查看['expect'](http://expect.sourceforge.net/)。 – 2013-03-15 20:22:20
您是否嘗試過正常的I/O重定向?根據腳本如何讀取輸入,有時候這可以起作用。 – 2013-03-15 20:25:43