zoukankan      html  css  js  c++  java
  • PIPESTATUS 对于ksh 无效

    BASH SHELL中,通常使用 $? 来获取上一条命令的返回码。

    对于管道中的命令,使用$?只能获取管道中最后一条命令的返回码,例如

    下面的例子中/not/a/valid/filename是一个不存在的文件

    cat /not/a/valid/filename|cat

    第一个cat失败,第二个cat成功,所以$?的值为0

    这种情况下,可以使用 $PIPESTATUS来获取管道中每个命令的返回码。

    注意:

    1、PIPESTATUS 是一个数组,第一条命令的返回码存储在${PIPESTATUS[0]},以此类推,上例中执行完管道中所有的命令后,PIPESTATUS数组第一个元素值为1,第二个元素值为0

    2、如果前一条命令不是一个管道,而是一个单独的命令,命令的返回码存储为${PIPESTATUS[0]},此时${PIPESTATUS[0]}同$?值相同(事实上,PIPESTATUS最后一个元素的值总是与$?的值相同)

    3、每执行一条命令,切记PIPESTATUS都会更新其值为上一条命令的返回码,

          cat /not/a/valid/filename|cat

          if [ ${PIPESTATUS[0]} -ne 0 ]; then echo ${PIPESTATUS[@]}; fi

          上例中执行完管道后,${PIPESTATUS[0]}值为1,${PIPESTATUS[1]}值为0

          但是上面的脚本执行完成后,输出为0,这是因为if 分支的测试命令

  • 相关阅读:
    mysql报错排查总结
    java设计模式--外观模式
    java设计模式--策略模式
    java设计模式--策略模式
    java设计模式--简单工厂
    java设计模式--简单工厂
    国外有哪些比较好的IT社区
    使用jmeter进行性能测试-Jmeter教程及技巧汇总 (转)
    Fiddler环境配置教程
    Fiddler+Jmeter+断言详细教程
  • 原文地址:https://www.cnblogs.com/kakaisgood/p/7681677.html
Copyright © 2011-2022 走看看