当其中一个子脚本失败时,不要退出 bash 脚本



我是shell脚本的新手。我有一个脚本,它使用不同的输入文件运行多个测试脚本。目前,如果任何一个输入测试失败,它将退出。我希望测试完成运行循环并退出,最后累积所有错误。

main.sh

set -e ;
set -x ;
for f in $files;do
./scripts/test_script.sh $f
done

====

=================

test_script.sh :运行很少的东西并像这样退出。

:
:
:
exit $?

====

============

set -e是导致脚本在命令失败后立即退出的原因。摆脱它。

如果希望在任何测试失败时退出状态为 1,请尝试以下操作:

exit_status=0
for f in $files; do
if ! ./scripts/test_script.sh "$f"; then
exit_status=1
fi
done
exit "$exit_status"

仅当test_script.sh的调用具有非零退出状态时,exit_status的值才会从 0 更改为 1。


更新:您可以将失败的脚本收集到数组中(您还应该使用它来存储文件列表(:

files=(foo.txt bar.txt)
failed=()
for f in "${files[@]}"; do
./scripts/test_script.sh "$f" || failed+=("$f")
done
if (( ${#failed[@]} != 0 )); then
echo "Failed:"
printf '  %sn' "${failed[@]}"
exit 1
else
exit 0
fi

最新更新