2012-12-18 151 views
0

如何運行命令(這是一個命令行Java應用程序),讀取其輸出並使用shell腳本向其輸入輸入。那可能嗎?我聽說過一些叫做GNU Screen的東西,但是當我用Google搜索它時,它看起來像是不會幫助我的東西?我很困擾。 所以基本上 我需要運行一個命令,得到它的輸出,發送它的輸入。注意:您需要輸入'exit'來停止命令,那麼是的。我很困惑。指點我對GNU Screen的教程和解釋或給我展示一些東西會很有幫助。如何運行命令,使用bash獲取輸出和輸入命令

+0

嗯,我需要1運行該程序2讀取它會給出一個shell窗口3輸入,就像你會在終端窗口中的輸出。我如何做到這一點是殼/ bash,如果我可以? – Algo

回答

0

這聽起來像你正在尋找的是Expect, 「[...]用於自動化交互式應用如telnet,f​​tp,passwd文件時,fsck,rlogin的,尖等的工具」使用Tcl腳本語言。

然而,如果您發送的程序中沒有指令依賴於同一程序的先前輸出,猛砸可能通過自身運作不夠好;只需使用臨時文件和I/O重定向(如Usman Saleem的回答):

  • 將命令列表保存到第一個文件中;和
  • 將程序的標準輸入重定向到該文件;和
  • 將標準輸出重定向到第二個文件。

read內置命令可能證明對讀取生成的輸出文件很有用。

GNU屏幕只是一個「終端複用器」程序是:a)可以讓你有超過一個調制解調器或SSH連接多個終端的「窗口」和b)可以讓你保持程序運行,你從服務器斷開後也。這不是你正在尋找的程序。

有一件事我會建議對是使你的shell腳本都產生程序的輸入,並接受該計劃的實時輸出;數據將被捕獲到stdio輸出緩衝區中,並可能發生死鎖。這就是Expect創建的原因。

+0

非常感謝!很有幫助 – Algo

0

如果您不需要等待輸入exit

output=$(echo "exit" | java prog) 
1

使用輸入輸出重定向。例如,

java yourprog args > output.txt 2> erroutput.txt < input.txt 

input.txt將包含您將在命令行中輸入的字符串。 System.out.println將轉到output.txt,System.err.println將轉到erroutput.txt

屏幕只是一個虛擬終端仿真器,它允許您從一個shell屏幕獲得多個shell。