我有一个这样的程序:
cat | cat << EOF
some content
EOF
按下&#34; EOF&#34;然后输入,第二只猫在我的终端上显示"some content\n"
,我发现第二只猫已经退出。但是第一只猫被封锁了,并没有退出。
Strace显示第一只猫被read(0,
阻止,如果我按下另一个输入(第二次输入)第一只猫的read
返回(得到一个&#34; \ n&# 34;)并尝试打印&#34; \ n&#34;管道,遇到sigpipe。
我的问题是,为什么第一只猫会被阻塞?或者为什么内容...... EOF没有给第一只猫一个文件的结尾?
另一个问题是,由于第一只猫没有关闭其fd / 1(标准输出),为什么第二只猫退出?
答案 0 :(得分:4)
您的此处文档会重定向到 second cat的标准输入,这会解释您的所有观察结果。你的意思似乎是
(cat | cat) <<EOF
some content
EOF