¿Cómo garantizar que los procesos secundarios en segundo plano finalicen cuando se usa `set -e`?

¿Cómo garantizar que los procesos secundarios en segundo plano finalicen cuando se usa `set -e`?
set -e

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

echo "done"
ueoa

Si ejecuto esto, una vez que alcance ueoa(un comando aleatorio que no existe), "terminará" pero seguirá ejecutándose while true; do echo "test"; sleep 1; done.

¿Cómo puedo asegurarme de que el proceso en primer plano también finalice en este caso?

Respuesta1

Como eso:

#!/usr/bin/env bash

trap 'kill $(jobs -p)' ERR

set -e

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

echo "done"
ueoa

Respuesta2

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

información relacionada