1

因此,我发现了我觉得奇怪的 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

有人可以解释这种行为吗?有没有办法确保下标的结尾不会像管道和三通那样被跳过?

谢谢

4

1 回答 1

1

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

(
#script
) | tee -i -a /tmp/$$.log
于 2012-08-10T09:07:19.407 回答