Como garantir que os processos filhos em segundo plano terminem ao usar `set -e`?

Como garantir que os processos filhos em segundo plano terminem ao usar `set -e`?
set -e

while true; do echo "test"; sleep 1; done &

echo "done"
ueoa

Se eu executar isso, quando chegar ueoa(um comando aleatório que não existe), ele 'terminará', mas continuará em while true; do echo "test"; sleep 1; doneexecução.

Como posso garantir que o processo em primeiro plano também seja encerrado neste caso?

Responder1

Assim:

#!/usr/bin/env bash

trap 'kill $(jobs -p)' ERR

set -e

while true; do echo "test"; sleep 1; done &

echo "done"
ueoa

Responder2

#!/bin/bash
set -e
function cleanup()
{
    kill $!
}
trap cleanup ERR
while true; do echo "test"; sleep 1; done &
echo "done"
ueoa

informação relacionada