命令行中的异步管道

tha*_*i57 2 linux bash

说我有两个命令:foo和bar.

我想执行这两个操作,使得foo的输出被"重定向"到bar的输入.不仅如此,我还希望写入foo输出流的每个字节直接/立即写入bar的输入流.

如果我使用命令:

foo | bar
Run Code Online (Sandbox Code Playgroud)

然后foo必须在bar开始读取其输入流之前终止/退出.我希望bar在foo写入其输出流的同时开始读取其输入流.

这里回答,如果我理解正确的话,指出存在由管道缓冲的字节数的限制,当他们充满对准管是"刷新"来也许这个限制可以减少到"栏的输入流不知何故?

hek*_*mgl 6

你写了:

foo必须在bar开始读取其输入流之前终止/退出.我想barfoo写入其输出流的同时开始读取其输入流.

这种假设不正确.foo在输出传递给它之前不需要终止bar.真正是glibc的(假设两个foobar链接到它)执行输出缓冲.除非输出foo到终端,否则输出将被写入缓冲区,并且当缓冲区达到一定大小时会刷新.如果输出foo太小以至于无法达到缓冲区大小,那么是,一旦foo退出,缓冲区将被刷新.

您可以使用该stdbuf命令调整缓冲区大小.以下命令不会缓冲foo输出:

stdbuf -o0 foo | bar
Run Code Online (Sandbox Code Playgroud)