代码之家  ›  专栏  ›  技术社区  ›  Nate Lockwood

脚本中的OSX bash管道没有像我预期的那样工作

  •  0
  • Nate Lockwood  · 技术社区  · 6 年前

    为了获得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 $?
    

    返回这个:

    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的返回表明它没有错误,但没有找到匹配项,即使如此,“java-version”的结果也会打印出来。

    我用几种不同的搜索模式尝试过grep,也用谷歌的帮助尝试过sed和aux,结果也一样。

    我做错了什么?

    1 回复  |  直到 6 年前
        1
  •  1
  •   chepner    6 年前

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

    java -version 2>&1 | grep java
    

    你应该做你想做的事。