shell脚本,子shell,子脚本,管道 - WEIRD(?)CTRL + C SIGNAL PROPAGATION

时间:2012-08-10 08:44:44

标签: bash shell signals pipe subshell

所以,我发现我的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恤那样被跳过?

由于

1 个答案:

答案 0 :(得分:1)

尝试使用tee选项“-i”。

(
#script
) | tee -i -a /tmp/$$.log