我有一個問題,有關將命令的輸出存儲在bash腳本中的變量內。
我知道一般有兩種方法可以做到這一點Bash腳本存儲命令輸出到變量
要麼
foo=$(bar)
# or
foo=`bar`
但對於Java版本的查詢,這似乎並沒有工作。
我所做的:
version=$(java --version)
這並不存儲VAR內的值。它甚至還能打印出來,實際情況並非如此。
我也嘗試重定向輸出到一個文件,但這也失敗了。
我有一個問題,有關將命令的輸出存儲在bash腳本中的變量內。
我知道一般有兩種方法可以做到這一點Bash腳本存儲命令輸出到變量
要麼
foo=$(bar)
# or
foo=`bar`
但對於Java版本的查詢,這似乎並沒有工作。
我所做的:
version=$(java --version)
這並不存儲VAR內的值。它甚至還能打印出來,實際情況並非如此。
我也嘗試重定向輸出到一個文件,但這也失敗了。
version=$(java -version 2>&1)
版本PARAM只需要一個破折號,如果你重定向標準錯誤,這就是,在該消息被寫入,你會得到期望的結果。
作爲一個副作用,在系統上使用兩個破折號是Unix上的一個非官方標準,但由於Java試圖在不同平臺上幾乎相同,它違反了Unix/Linux的期望,並且在這方面的行爲與在Windows ,正如我懷疑的那樣,在Mac OS上。
感謝一噸,正是我在尋找的 – user1278282 2012-03-19 12:31:12
你如何知道輸出是否寫入stderr或stdout? – user1527227 2014-07-25 19:59:13
@ user1527227:您可以測試它。 – 2014-07-26 08:41:26
那是因爲java -version
寫入stderr
而不是stdout
。您應該使用:
version=$(java -version 2>&1)
爲了stderr
重定向到stdout
。
您可以通過運行以下兩個命令看到:
java -version > /dev/null
java -version 2> /dev/null
謝謝你的洞察,好像頂也打印版太stderr – user1278282 2012-03-19 12:31:26
有超過兩種方式。閱讀foo <<(回聲「這是另一種方式」),但這與捕獲錯誤輸出的問題無關,已在下面回答。 – 2014-06-06 21:07:26