所以,我发现我的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的输出,在下标(sleep 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
有人可以解释一下这种行为吗?有没有办法确保下标的末尾不会像管道和T恤那样被跳过?
由于
答案 0 :(得分:1)
尝试使用tee选项“-i”。
(
#script
) | tee -i -a /tmp/$$.log