сценарий оболочки, подоболочка, нижний сценарий, канал - СТРАННОЕ (?) CTRL+C РАСПРОСТРАНЕНИЕ СИГНАЛА

Итак, я обнаружил странное поведение моего скрипта 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

Может кто-нибудь объяснить это поведение? Есть ли способ убедиться, что конец нижнего индекса не будет пропущен с трубой и тройником?

Спасибо


person FloG    schedule 10.08.2012    source источник


Ответы (1)


Попробуйте использовать опцию тройника "-i".

(
#script
) | tee -i -a /tmp/$$.log
person Vortexfive    schedule 10.08.2012