Простая альтернатива - использование трубы cat
. У меня сработало следующее:
echo "-" > test.text;
for x in 1 2 3; do
( sleep $x; echo $x | tee --append test.text; ) &
done | cat
Если я нажму Ctrl-C до того, как последний номер будет напечатан на стандартный вывод. Это также работает, если генерирующая текст команда требует много времени, например «find /», то есть не только соединение с stdout через cat, но и дочерний процесс.
Для больших сценариев, в которых широко используются подпроцессы, самый простой способ убедиться в том, что поведение Ctrl-C с отступом заключает весь сценарий в подоболочку, например,
#!/usr/bin/bash
(
...
) | cat
Я не уверен, однако, имеет ли это тот же эффект, что и ответ Эндрю (т.е. я не уверен, какой сигнал посылается подпроцессам). Также я проверил это только с cygwin, а не с родной оболочкой Linux.