我在bash脚本中有以下代码:
for job in `jobs -p`; do
echo "PID => ${job}"
if ! wait ${job} ; then
echo "At least one test failed with exit code => $?" ;
EXIT_CODE=1;
fi
done
wait <pid>
,在这种情况下,wait ${job}
应返回退出代码,但我不知道如何获取/查看该值。我需要做的是将上面的脚本更改为:
for job in `jobs -p`; do
echo "PID => ${job}"
CODE=0;
wait ${job} || CODE=$?
if ! ${CODE} ; then
echo "At least one test failed with exit code => ${CODE}" ;
EXIT_CODE=1;
fi
done
有更清洁,更简洁的方法吗?除了使用我刚刚使用的技术之外,我对如何从wait <pid>
检索“返回值”感到困惑。还有其他办法吗?
答案 0 :(得分:2)
这个怎么样:
declare -A failures
for job in `jobs -p`; do
wait "$job" || ((failures[$job] = $?))
done
if (( "${#failures[@]}" > 0 )); then
# traverse the hash and print which processes failed, along with exit code
fi
答案 1 :(得分:2)
如果你真的想要更简洁,你可以这样做:
wait $job || {
echo "$job failed with code $?"
EXIT_CODE=1
}
旁注:for job in $(jobs -p); do
可能不是最好的主意。循环启动时会扩展作业列表,但在循环运行时作业可能会完成(例如,当您在列表中等待第一个作业时,第二个作业完成)。
相反,你可以这样做:
while :; do
wait -n && continue # wait for any job to finish
code=$?
((code==127)) && break # no jobs found to wait for
echo "A test failed with code $code"
done
答案 2 :(得分:1)
清洁?什么比最明显和最直接的方式更清洁:
7,000.00
当然它有点冗长,但它也很容易理解。