set -e
while true; do echo "test"; sleep 1; done &
echo "done"
ueoa
ueoa
これを実行すると、 (存在しないランダムなコマンド)に到達すると、「終了」しますが、while true; do echo "test"; sleep 1; done
実行は継続されます。
この場合、フォアグラウンド プロセスも終了するようにするにはどうすればよいですか?
答え1
こんな感じです:
#!/usr/bin/env bash
trap 'kill $(jobs -p)' ERR
set -e
while true; do echo "test"; sleep 1; done &
echo "done"
ueoa
答え2
#!/bin/bash
set -e
function cleanup()
{
kill $!
}
trap cleanup ERR
while true; do echo "test"; sleep 1; done &
echo "done"
ueoa