【发布时间】:2021-09-17 01:49:41
【问题描述】:
在fish shell中执行这些命令时
$ mkfifo answer
$ nc -vv -l -k -p 8001 <answer | tee -a answer
命令挂起。
如果我通过echo "" > answer 写信给answer。然后nc 恢复并开始正确收听。
如果,相反我CTRL-C挂了进程,下面是留言:
^C<W> fish: An error occurred while redirecting file 'answer'
open: Interrupted system call
另一方面,在 bash 中,执行时:
$ mkfifo answer
$ nc -vv -l -k -p 8001 <answer | tee -a answer
Listening on localhost 8001
命令不挂起并直接开始收听。
fish 和 bash 中发生了什么不同的情况来解释这种不同的行为?
【问题讨论】:
-
除了荒谬的回答之外,我还要指出您实际上不能依赖 bash 行为;或任何其他 POSIX shell AFAICT。打开 FIFO 进行读取将阻塞,直到进程打开它进行写入。
<answer在 bash 中打开块,但对您来说并不明显,因为它发生在子进程中。
标签: bash named-pipes fish