2015-07-19 68 views
0

我想寫一個安裝(bash)腳本,其中我需要檢查用戶是否安裝了java 1.8。重定向java和javac輸出

最明顯的方式做到這一點是調用

javac -version | grep 1.8 

,但對於一些奇怪的原因javac的(和java)-version輸出不能重定向 - 既不|,>或>> - 中第一種情況,第二種程序沒有得到任何輸入,第二種和第三種情況下,執行命令後輸出文件爲空。 我試着在三臺不同的機器上檢查它,結果每個都是一樣的。

這是什麼原因? 有沒有其他方法可以檢查java版本?

+0

你知道嗎stdout和stderr是? (也可以考慮編寫一個小的Java 1.3程序,它使用反射直接測試JVM提供的工具) –

+0

另外,當java 1.9出來時,你會做什麼? –

+0

我並不關心1.9版本,因爲那時軟件不會被使用。 如果沒有Java,'小Java 1.3'程序將無法工作。 – inexxt

回答

4

看來輸出發送到STDERR。試試這個:

javac -version 2>&1 

這會的STDERR輸出重定向到STDOUT。現在你應該可以管理命令。

如果你只是想將其重定向到一個文件,只是文件名代替&1,所以:

javac -version 2>out 
+0

'2>&1'不會「重定向到標準輸出而不是標準錯誤」。什麼是將stderr重定向到標準輸出。這不是一回事;) – fge

+0

@Vivin Paliath - 你絕對正確:'2>&1'將stdout和stderr重定向到「相同的地方」。這是解決這個問題的好方法。另外:直到最近我才知道這個語法* ALSO *在Windows/DOS .bat文件中工作。 – paulsm4

+0

@fge糟糕,你是絕對正確的。這就是我的意思:) –