OSX bash 脚本中的管道无法正常工作

OSX bash piping in script not working as I expect

为了获得 java 版本,我在 bash 运行 这个版本(我真正想要的是 1.8 或 1.8。0_171)

$ java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

在我的测试脚本中,只获取第一行就可以了,所以我执行了这个:

java -version | grep java 
echo return is $?

这return是这个:

java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)
return is 1

根据手册页,grep 的 return 表示它没有错误,但即使打印了 "java -version" 的结果也没有找到匹配项。

我尝试了 grep 和几种不同的搜索模式,并尝试了 sed 和 aux,使用 Google 寻求帮助,结果相同。

我做错了什么?

java -version 写入标准错误,而不是标准输出,因此 grep 没有收到任何输入。

java -version 2>&1 | grep java

应该如你所愿。