Bash Shell脚本在失败后继续

Bash Shell脚本在失败后继续,bash,shell,Bash,Shell,如何编写一个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 但是,当no

如何编写一个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

但是,当node modules命令失败时,脚本将停止。

假设脚本的名称为test.sh

在执行脚本时,使用以下命令执行脚本

./test.sh 2>>error.log

错误原因错误命令不会出现在终端上,但会存储在Error.log文件中,以后可以引用该文件。

您可以使用

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

在调用wdio之前,您可以尝试将+e设置为第一行。这将使bash不会在出现错误时退出。失败时退出不是默认行为。您的脚本需要使用
bash-e yourscript
来调用,以便仅对此处给出的代码起作用(如果没有以这种方式或类似方式调用,则
set+e
将不起作用)。如果未通过问题中未包含的某些代码或调用选项启用
errexit
标志(关于哪一点:抱怨re:没有包括a),我想知道当终端出现错误时,是否
wdio
正在使终端处于不良状态,这样以后
echo
s就没有明显的效果了?您没有告诉我们,您是如何调用脚本的。我不知道这一点(另请参阅Charles Duffy的评论),您的问题很难回答。我假设此答案中的基本假设是,在启用了
set-e
的情况下调用OP的代码,这样
|
会将命令标记为选中,从而避免出现errexit行为?如果我们没有启用errexit(无论是他们的shebang还是他们的脚本都没有打开它),我不清楚这会有什么不同。