【问题标题】:Bash script store command output into variableBash 脚本将命令输出存储到变量中
【发布时间】:2012-04-03 19:46:11
【问题描述】:

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

要么

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

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

我做到了:

version=$(java --version)

这不会将值存储在 var 中。它甚至仍然会打印它,这真的不应该是这样。

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

【问题讨论】:

  • 方法不止两种。阅读 foo

标签: bash variables store


【解决方案1】:
 version=$(java -version 2>&1)

版本参数只需要一个破折号,如果你重定向stderr,也就是消息写入的地方,你会得到想要的结果。

作为旁注,使用两个破折号是类 Unix 系统上的非官方标准,但由于 Java 试图在不同平台上几乎相同,它违反了 Unix/Linux 的期望,并且在这方面的行为与 Windows 相同,正如我所怀疑的,在 Mac OS 上。

【讨论】:

  • 怎么知道输出是写到stderr还是stdout?
  • @user1527227:你可以测试一下。
  • 有点晚了,谢谢!!
【解决方案2】:

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

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

为了将stderr重定向到stdout。

运行以下2条命令即可查看:

java -version > /dev/null

java -version 2> /dev/null

【讨论】:

  • 谢谢你的洞察力,似乎top也打印了stderr版本
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 2021-12-03
  • 2015-11-08
  • 1970-01-01
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
相关资源
最近更新 更多