Итак, я обнаружил странное поведение моего скрипта bash.
Вот тестовый скрипт:
echo "start of script"
(
echo "start of subshell"
cat > /tmp/$$ << EOF
trap 'exit 99' SIGINT
echo "sleep 10, hit ctrl+c now"
sleep 10
EOF
chmod +x /tmp/$$
/tmp/$$
echo "end of subshell"
#)
) | tee -a /tmp/$$.log
echo "end of script"
Итак, как видите, я использую круглые скобки, которые создают подоболочку, чтобы легко передать вывод для целей ведения журнала.
Внутри этой подоболочки я запускаю скрипт, который перехватывает сигнал ctrl+c и просто выходит из скрипта.
Таким образом, в зависимости от того, передаю ли я вывод подоболочки или нет, поведение при нажатии ctrl+c во время индекса (sleep 10) отличается.
С | tee -a /tmp/$$.log, вывод показывает:
[/tmp] ./test.sh
start of script
start of subshell
sleep 10, hit ctrl+c now
end of script
Без трубы и тройника вывод показывает:
[/tmp] ./test.sh
start of script
start of subshell
sleep 10, hit ctrl+c now
**end of subshell**
end of script
Может кто-нибудь объяснить это поведение? Есть ли способ убедиться, что конец нижнего индекса не будет пропущен с трубой и тройником?
Спасибо