2014-09-10 101 views
0

當我運行myTest.jar,它輸出STDOUT(不是在一個文件中)的信息很多,我試圖讀取/搜索該文件的特定字符串作爲變量在我的bash腳本中。bash腳本:搜索Java STDOUT的變量

的Java標準輸出:

line 1 info............ 

line 2 info........... 

.... 

... 

Successful (either 'Successful' or 'Failed') 

如何搜索,在bash,在標準輸出或最後一行(「成功」或「失敗」),而標準輸出重定向到一個文件?

在此先感謝

+0

輸出可以同時發送到文件和stdout,然後你可以grep文件(輸出仍然會顯示在屏幕上)。這可以滿足你的需求嗎? – 2014-09-10 17:34:23

+0

將輸出輸出到'tail --lines = 1'命令?我不確定這是否會給你你需要的東西。 – ajb 2014-09-10 17:34:38

+0

就像其他人一樣,除了「成功」或「失敗」不取決於jar是否失敗,它只是我根據結果編寫的報告的總體狀態。 – Glen 2014-09-11 18:35:07

回答

7

這不是檢查成功或失敗的好方法。

您應該改寫myTest.jar,以便在成功時使用System.exit(0),並在出錯時使用System.exit(1)(或更高版本)。如果程序寫得很好,它已經可以做到這一點。

然後,您可以檢查bash中是否成功或失敗。

if java -jar mytest.jar 
then 
    echo "The command succeeded :D" 
else 
    echo "The command failed :(" 
fi 

所有UNIX程序以這種方式工作,你應該確保myTest.jar也不例外。

+0

「成功」或「失敗」不取決於jar是否失敗,它只是我寫報告的總體狀態,取決於結果。你的話基本上會達到同樣的效果嗎? – Glen 2014-09-11 18:35:24

+0

jk它的工作,我不得不做一些小的調整 – Glen 2014-09-11 19:52:06

0

爲了使這項工作,你需要stdout重定向到一個文件,然後貓/ VIM /搜索該文件。 Bash不會自行保存命令的輸出。

或者,您可以使用像screen這樣的程序,它允許您將會話的副本保存到文件中。你會得到一切和命令行的輸出。

0

爲未來的用戶,我用「其他人」方法,一些小的調整:

1)退出代碼和你做什麼都必須正確運行的罐子後,將不適合我在其它段

2)I讀我接收到退出代碼和由如果我的條件循環(0-2)退出代碼是在給定的Java

3)片的我的bash代碼

EXIT_CODE=$? 
echo Exit code: $EXIT_CODE 

if [ $EXIT_CODE = "0" ] 
then 
    ...............do something 
elif [$EXIT_CODE = "1"] 
then 
    ...............do something 
else 
    ...............do something 
fi