Shell脚本在失败后继续运行

4
我该如何编写一个shell脚本,即使特定命令失败也能继续执行,但我希望稍后输出错误,我尝试了以下方法:
#!/bin/bash
./node_modules/.bin/wdio wdio.conf.js --spec ./test/specs/login.test.js
rc=$?
echo "print here"
chown -R gitlab-runner /gpc_testes/
chown -R gitlab-runner /gpc_fontes/
exit $rc

但是,当节点模块命令失败时,脚本会停止运行。


在调用wdio之前,您可以尝试将set +e作为第一行。这将使bash在出现错误时不退出。 - user8122577
1
失败时退出不是默认行为。您的脚本需要使用 bash -e yourscript 调用才能产生该效果(如果没有以这种方式或某种等效方式调用,set +e 将无效)。 - Charles Duffy
如果在问题中没有包含启用errexit标志的代码或调用选项(关于这一点:抱怨未包括[mcve]),我想知道是否wdio在退出时以错误状态离开终端,导致后来的echo没有可见效果? - Charles Duffy
你没有告诉我们你如何调用脚本。不知道这一点(请参见Charles Duffy的评论),你的问题很难回答。 - user1934428
2个回答

5
您可以使用

标签来创建段落。

command_that_would_fail || command_failed=1
# More code and even more
.
.
if [ ${command_failed:-0} -eq 1 ]
then
 echo "command_that_would_fail failed"
fi

1
我假设这个答案的基本假设是,OP的代码以某种方式启用了set -e,因此||将把命令标记为已检查,从而避免了errexit行为?如果我们没有启用errexit(他们的shebang或脚本也没有打开它),我不清楚这会有什么区别。 - Charles Duffy

-4
假设脚本的名称为test.sh。
在执行脚本时,请使用以下命令执行:
./test.sh 2>>error.log
由于错误命令不会出现在终端上,而是存储在文件error.log中,因此可以在以后参考该文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接