stderr包含特定消息时忽略错误

时间:2018-01-22 22:10:02

标签: bash

我有一个流程,我想忽略某类错误。不幸的是,这些特定错误没有可区分的返回码,但它们是可区分的错误消息。简而言之,在运行时:

npm run build

文字' npm ERR!缺少脚本:build'如果" build"将出现在stderr中脚本丢失了。但是,在这种特殊情况下,我不想考虑错误,即我想返回0作为返回代码。

关于解决方案可能带来什么的一些想法:

  1. 将stderr重定向到管道以获取' npm ERR!缺少脚本:build'
  2. 单独留下stdout
  3. 如果grep找到文本,它将返回0,这很好,因为这是一个"成功"无论如何对我来说。在这种情况下,我只是希望stderr被忽略,但作为奖励,写出一个"警告"到stdout
  4. 如果grep找不到文本,那么我希望将文本写入stderr并且我想要"原文"错误返回代码返回。
  5. 更新1: 到目前为止,我尝试了以下有点天真的方法:

    #!/bin/bash
    
    npm run build 2> temp.file
    grep 'npm ERR! missing script: build' temp.file
    RC=$?
    
    if [[ RC -eq 0 ]]; then
      echo 'WARNING: No "build" script found'
    fi
    

    ..然后我运行了以下测试用例:

    场景1:有效的构建脚本:     "构建":"回显'占位符构建脚本'"

    输出: $ ./build.sh

      

    consumer-app-cod@1.0.0-alpha build C:\ projects \ epo-consumer-app \ app   echo'占位符构建脚本'

    '占位符构建脚本'

    预期:看起来不错

    场景2:无效的构建脚本:     " build":" invalid-bin"

    $ ./build.sh

      

    consumer-app-cod@1.0.0-alpha build C:\ projects \ epo-consumer-app \ app   无效宾

    预期:类似于: $ invalid-bin bash:invalid-bin:找不到命令

    场景3:缺少构建脚本

    $ ./build.sh 错误的ERR!缺少脚本:构建 警告:否#34;构建"找到脚本

    预期:看起来不错

    一些事情:

    1. 第二个测试用例失败了,但它没有打印stderr(因为我不确定如何在将stdr重定向到临时文件之后将stderr恢复到stdout)。 / LI>
    2. 临时文件看起来并不理想,似乎应该有一种方法可以通过没有中间文件的管道重定向它,但我甚至不知道从哪里开始

0 个答案:

没有答案