почему здесь документ делает кошку заблокированной

У меня есть такая программа:

cat | cat << EOF
some content
EOF

После того, как я нажму «EOF» и войду, второй кот отобразит "some content\n" на моем терминале, я ps aux и обнаружил, что второй кот вышел. Но первый кот заблокирован и не выходит.

Strace показывает, что первый кот заблокирован read(0,, если я нажму еще один ввод (второй ввод), read первого кота вернется (получил "\n") и попытается напечатать "\n" в конвейер и столкнется с sigpipe.

Моя проблема в том, почему первый кот заблокирован? Или почему контент... EOF не дает первому коту конец файла?

Другая проблема заключается в том, что, поскольку первая кошка не закрыла свой fd/1 (stdout), почему вторая кошка выходит?


person menghan    schedule 17.09.2014    source источник


Ответы (1)


Ваш здесь документ перенаправляется на стандартный ввод второго кота, который объясняет все ваши наблюдения. То, что вы имели в виду, кажется

(cat | cat) <<EOF
some content
EOF
person The Show that never ends    schedule 17.09.2014
comment
Благодарю вас! Или так тоже работает: cat << EOF | cat \nsome content\nEOF - person menghan; 17.09.2014