Bash 获取shell脚本中上一个命令的输出
我有以下shell脚本:Bash 获取shell脚本中上一个命令的输出,bash,shell,command-line,command,exit-code,Bash,Shell,Command Line,Command,Exit Code,我有以下shell脚本: #!/usr/bin/env sh ./node_modules/.bin/nightwatch --env chrome --tag=enabled exit 0 nightwatch命令始终返回退出代码1,无论nightwatch测试是否失败或通过都无所谓。因此,我想检查这个命令的控制台输出是否包含一个特定的字符串(可能是failed)来处理它,并用shell脚本返回一个正确的退出代码 我唯一的要求是,nightwatch命令输出在控制台上可见,因为调试原因我们需
#!/usr/bin/env sh
./node_modules/.bin/nightwatch --env chrome --tag=enabled
exit 0
nightwatch
命令始终返回退出代码1
,无论nightwatch测试是否失败或通过都无所谓。因此,我想检查这个命令的控制台输出是否包含一个特定的字符串(可能是failed
)来处理它,并用shell脚本返回一个正确的退出代码
我唯一的要求是,nightwatch命令输出在控制台上可见,因为调试原因我们需要它
我想做这样的事情(伪代码):
有很多更有效的方法可以做到这一点,但根据您的伪代码:
#!/usr/bin/env sh
lastOutput=$(./node_modules/.bin/nightwatch --env chrome --tag=enabled)
if [[ $lastOutput = *"failed"* ]]; then
exit 1
else
exit 0
fi
由于您在POSIX bourne shell上运行此命令,因此可以将命令输出与
[
运算符或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
使用$?。这将返回最后一个命令退出代码。您可以使用命令替换。
lastpoutput=$(./node\u modules/.bin/nightwatch--env chrome--tag=enabled)
然后检查lastpoutput
作为[$lastpoutput=*失败*]]&&exit 1 | | exit 0
但nightwatch始终返回退出代码1,不管nightwatch测试是否失败。因此,我必须分析nightwatch输出,以决定必须返回哪个退出代码。@Martin我会花一些时间弄清楚为什么它总是退出1;这不是(或者不应该是)正常。没错。这是一个nghtwatch或selenium错误,我知道。但首先我必须为我找到一个解决方法。我还为夜视团队创建了一个错误问题。你的情况总是正确的;你需要=
周围的空格。我更喜欢如果/node | grep-q“失败”,那么退出1;否则退出0;fi
而不是using$?
-关于更少的语句,无需考虑$?
。我会发布一个答案,但实际上它与您的答案相同,因此只在这里进行评论。@Inian:因为OP说的是控制台输出而不是标准输出,所以我们必须注意错误消息failed被打印成标准错误的情况(一种不太可能的情况),因此您应该向解决方案中添加2>&1
。
if ./node_modules/.bin/nightwatch --env chrome --tag=enabled | grep -q failed; then
exit 1
else
exit 0
fi