On 04/04/20 17:47, Andrew Jones wrote: > Bash 5.0 changed 'wait' with no arguments to also wait for all > process substitutions. For example, with Bash 4.4 this completes, > after waiting for the sleep > > ( > sleep 1 & > wait > ) > >(tee /dev/null) > > but with Bash 5.0 it does not. The kvm-unit-tests (overly) complex > bash scripts have a 'run_migration ... 2> >(tee /dev/stderr)' > where the '2> >(tee /dev/stderr)' comes from 'run_qemu'. Since > 'run_migration' calls 'wait' it will never complete with Bash 5.0. > Resolve by implementing our own wait; just a loop on job count. > > Signed-off-by: Andrew Jones <drjones@xxxxxxxxxx> > --- > scripts/arch-run.bash | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > diff --git a/scripts/arch-run.bash b/scripts/arch-run.bash > index d3ca19d49952..da1a9d7871e5 100644 > --- a/scripts/arch-run.bash > +++ b/scripts/arch-run.bash > @@ -156,7 +156,11 @@ run_migration () > echo > ${fifo} > wait $incoming_pid > ret=$? > - wait > + > + while (( $(jobs -r | wc -l) > 0 )); do > + sleep 0.5 > + done > + > return $ret > } > > Ouch. Queued both, thanks. Paolo