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; done
execuçã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