为什么这里的文件让猫被阻止

时间:2014-09-17 06:18:25

标签: bash heredoc

我有一个这样的程序:

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(标准输出),为什么第二只猫退出?

1 个答案:

答案 0 :(得分:4)

您的此处文档会重定向到 second cat的标准输入,这会解释您的所有观察结果。你的意思似乎是

(cat | cat) <<EOF
some content
EOF