【发布时间】:2018-09-06 09:00:06
【问题描述】:
我有一个 bash 脚本,我想在其中并行运行两个进程,如果其中一个进程返回非零,则脚本会失败。我最初尝试的一个最小示例是:
#!/bin/bash
set -e
(sleep 3 ; true ) &
(sleep 4 ; false ) &
wait %1 && wait %2
echo "Still here, exit code: $?"
正如预期的那样,这不会打印消息,因为wait %1 && wait %2 失败并且脚本由于set -e 而退出。但是,如果 waits 被反转,使得第一个具有非零状态 (wait %2 && wait %1),则消息被打印出来:
$ bash wait_test.sh
Still here, exit code: 1
将每个 wait 放在自己的行上可以按我的意愿工作并在任何一个进程失败时退出脚本,但它不适用于 && 的事实让我怀疑我在这里误解了一些东西.
谁能解释这是怎么回事?
【问题讨论】:
标签: bash