我在 shell 脚本中有一个 for 循环:
#!/bin/bash
set -u
set -e
for l in sh rb py php java cs; do
(cd $l; ./run-tests.sh)
done
目的是当任何一个子命令同样出错时让 for 循环终止。
现在,我有一个解决方法:(cd $l; ./run-tests.sh) || die "Message here"
以及 的适当定义die
。但是,我真的很好奇为什么 for 循环不会按照“set -e”命令设置的期望自行终止?理想情况下,我不希望每个 for 循环都像这样特殊化。:)
答案1
set -e
如果失败则不会立即退出,原因./run-test.sh
是:
for l in sh rb py php java cs; do
(cd $l; ./run-tests.sh)
done
对于复合语句。此复合语句的状态是 的最后一次运行的状态./run-tests.sh
。
您的工作对我来说听起来不错。
答案2
我没有评论权限,所以在这里发帖。这取决于 run-tests.sh 中的脚本。你确定这会给出一个非零值吗:
./运行测试.sh
回显 $?