我想制作一个构建链脚本,如果编译过程中出现错误,我不希望它执行到最后。
这是我第一次在 bash 中编写更“详细”的脚本,但它不起作用:
- 它没有回显错误,尽管我在其中有带有错误一词的行
- 无论 testError 的值是多少,脚本都会挂在行中
这是代码:
testError=false
output=$(scons)
while read -r line; do
if [[ $line == .*[eE]rror.* ]] ; then echo 'ERROR' ; $testError = true ; fi #$testError = true fi
done
echo $testError
if $testError ; then exit ; fi;
... other commands
编辑:按照所有海报的答案和Bash 在循环内设置全局变量并保留其值 - 或处理假人的替代以及如何在 bash 脚本中使用正则表达式?,这是代码的最终版本。有用:
testError=false
shopt -s lastpipe
scons | while read -r line; do
if [[ $line =~ .*[eE]rror.* ]] ; then
echo -e 'ERROR'
testError=true
fi
echo -e '.'
done
if $testError ; then
set -e
fi