我有一个问题,就是在bash脚本中将命令的输出存储在变量中 我知道一般来说有两种方法可以做到这一点
或者
foo=$(bar)
# or
foo=`bar`
但是对于Java版本查询,这似乎不起作用。
我做了:
version=$(java --version)
这不会将值存储在var中。它甚至还会打印出来,但事实并非如此。
我也尝试将输出重定向到文件,但这也失败了。
答案 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