为什么当我这样做时:$ var=$(java -version)
在我的 bash 终端上,var
总是空的?同样的事情,$ java -version >> version.txt
没有任何内容发送到 version.txt 文件。
答案1
该命令通常将此类信息发送到 STDERR,而不是STDOUT。因此,对于您的情况,您应该使用如下命令:
java -version >>version.txt 2>&1
和
var=$((java -version) 2>&1)
答案2
正如罗密欧所指出的,java -version
他写道标准错误,不在标准输出,因此您应该使用:
var=$(java -version 2>&1)
如果您只想获取版本而不是命令的所有输出java -version
,例如,为了更方便编写脚本,您可以使用以下命令:
var=$(java -version 2>&1 | awk -F '"' 'NR==1 {print $2}')
解释
java -version
将 Java 版本信息打印到标准错误2>&1
重定向标准错误到标准输出|
获取左侧命令的输出并将其用作右侧命令的输入awk -F '"' 'NR==1 {print $2}'
有点复杂,但基本上它将收到的输入分成几部分,允许您分别对每个部分进行操作(最有知识的人可能会把我扔给狮子,这是对 awk 是什么以及做什么的非常糟糕的总结)。awk
用于除法的字符由-F
选项指定,在本例中,它除以字符"
- 最后一部分指定仅必须打印结果除法的
{print $2}
第一行()中的第二个元素() 。NR==1
这将输出类似的内容1.8.0_191
。