因此,我发现了我觉得奇怪的 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"
因此,如您所见,我使用括号创建子shell 来轻松管道输出以进行日志记录。
在这个子shell 中,我运行一个脚本来捕获 ctrl+c 信号并简单地退出脚本。
因此,根据我是否通过管道传输子shell的输出,在下标(睡眠 10)期间按 ctrl+c 时的行为会有所不同。
与| 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
有人可以解释这种行为吗?有没有办法确保下标的结尾不会像管道和三通那样被跳过?
谢谢