Bash脚本存储命令输出到变量

时间:2012-03-19 10:05:16

标签: bash variables store

我有一个问题,就是在bash脚本中将命令的输出存储在变量中 我知道一般来说有两种方法可以做到这一点

或者

foo=$(bar)
# or
foo=`bar`

但是对于Java版本查询,这似乎不起作用。

我做了:

version=$(java --version)

这不会将值存储在var中。它甚至还会打印出来,但事实并非如此。

我也尝试将输出重定向到文件,但这也失败了。

2 个答案:

答案 0 :(得分:67)

 version=$(java -version 2>&1)

版本参数只需要一个短划线,如果你重定向stderr,也就是写入消息的位置,你将获得所需的结果。

作为旁注,使用两个短划线是Unix系统上的一个非官方标准,但由于Java试图在不同平台上几乎完全相同,它违反了Unix / Linux期望并且在这方面的行为与在Windows上相同,而且我怀疑,在Mac OS上。

答案 1 :(得分:15)

这是因为java -version写入stderr而不是stdout。你应该使用:

version=$(java -version 2>&1)

为了将stderr重定向到stdout

您可以通过运行以下两个命令来查看它:

java -version > /dev/null

java -version 2> /dev/null