Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 获取shell脚本中上一个命令的输出_Bash_Shell_Command Line_Command_Exit Code - Fatal编程技术网

Bash 获取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命令输出在控制台上可见,因为调试原因我们需

我有以下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
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