2012-08-10 40 views
1

所以,我认定我的bash脚本的行为,我觉得很奇怪。shell脚本,子shell,子脚本,管道 - (?)WEIRD CTRL + C信号传播

下面是测试脚本:

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信号和简单地退出脚本的脚本。

因此,根据如果我管子外壳的输出与否,下标期间击打CTRL + C时的行为(睡眠10)不同。

随着|三通-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

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

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