bash coprocess 是如何实现流水线化的?

bash coprocess 是如何实现流水线化的?

注意这段话来自男人狂欢(强调我的):

协进程

coprocess 是一个 shell 命令,前面带有 coproc 保留字。协进程在子 shell 中异步执行,就好像命令已使用 & 控制运算符终止一样,带双向管 在执行 shell 和协进程之间建立。

现在,正如我们所知,与其他 *nix 系统不同,Linux 管道是单向的(也参考人管(7),可移植性部分)。那么 bash coproces 如何实现 Linux 上没有的“双向管道”呢?

答案1

为 stdin 制作一个,为 stdout 制作一个, 一样的方法到子流程的管道总是工作。这就是为什么你在一个数组中得到两个 fd。每个管道的一端位于父管道中(作为数组中的 FD),每个管道的一端位于子管道中(作为 fd 0 和 fd 1、stdin 和 stdout)。在子进程中写入 fd 1 可以让您读取一些内容COPROC[0],对于标准输入反之亦然。

此设置也在您引用的手册页后面的段落中进行了描述。没有什么特别的事情发生,而且做同样的事情使用标准pipe功能在所有系统上,无论本地管道如何在 POSIX 提供的基础上工作。

相关内容