在shell脚本中获取上一个命令的输出

时间:2018-03-27 19:51:55

标签: bash shell command-line command exit-code

我有以下shell脚本:

#!/usr/bin/env sh
./node_modules/.bin/nightwatch --env chrome --tag=enabled
exit 0

nightwatch命令始终返回exit code 1,如果夜班测试失败或通过则无关紧要。因此,我想检查此命令的控制台输出是否包含要处理的特定字符串(可能是failed),并使用shell脚本返回正确的退出代码。

我唯一的要求是,在监视器上可以看到nightwatch命令输出,因为出于调试原因我们需要它。

我想做这样的事情(伪代码):

#!/usr/bin/env sh
./node_modules/.bin/nightwatch --env chrome --tag=enabled
if lastOutput.contains("failed"); then
  exit 1
else
  exit 0
fi

2 个答案:

答案 0 :(得分:2)

由于您在POSIX bourne shell sh上运行此命令,因此您可以将命令输出与[运算符或case构造

进行比较
case "$(./node_modules/.bin/nightwatch --env chrome --tag=enabled)" in
  *failed*)  exit 1;;
   *) exit 0 ;;
esac

或使用grep的返回码并要求它在设置-q标志时保持沉默

if ./node_modules/.bin/nightwatch --env chrome --tag=enabled | grep -q failed; then
    exit 1 
else
    exit 0
fi

答案 1 :(得分:0)

有很多更有效的方法可以解决这个问题,但根据你的假代码:

#!/usr/bin/env sh
lastOutput=$(./node_modules/.bin/nightwatch --env chrome --tag=enabled)
if [[ $lastOutput = *"failed"* ]]; then
  exit 1
else
  exit 0
fi