求解释epipe是怎么实现的?

(以下是依据测试给出的猜测)

好像 Vim 要求 stdout 必须是 terminal

~ $ ( vim tmp && cat tmp ) | nl 
Vim: Warning: Output is not to a terminal

work-around:把 stdout 改成 terminal

~ $ tty=`tty`
~ $ ( 1>$tty vim tmp && cat tmp ) | nl

Emacs 没这个要求

~ $ ( emacs -Q tmp && cat tmp ) | nl

但它们都要求 stdin 是 terminal

~ $ pwd | ( vim tmp && cat tmp )
Vim: Warning: Input is not from a terminal
~ $ pwd | ( emacs -Q tmp && cat tmp )
emacs: standard input is not a tty

work-around,把 stdin 改成 terminal

~ $ pwd | ( 0<$tty vim tmp && cat tmp )
1 个赞