我有一个问题,有关将命令的输出存储在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