0

我想创建一个文件描述符,写入时可以从多个进程中读取而不消耗数据。我知道命名管道,但由于它是一个先进先出,只有一个进程可以获取数据。

我的用例如下。使用 git,钩子使用标准输入将要处理的数据传递到钩子中。我希望能够从父挂钩调用多个子挂钩。每个子钩子都应该获得与父级接收到的相同的标准输入数据。如果我在使用管道时没有弄错,那么每个子进程将不会获得相同的标准输入。相反,第一个读取标准输入的钩子会消耗数据。这个对吗?

在这一点上,我真正认为可行的唯一选择是将标准输入写入文件,然后从每个子进程中读取该文件。还有其他方法吗?

4

1 回答 1

1

也许你可以尝试使用 tee。

从男人三通:

tee - read from standard input and write to standard output and files

在您以这种方式处理的情况下:tee >(parent) >(hook1) >(hook2) >(hookn)

(每个钩子都是不同的进程、命令、shell,无论你想要什么)

这里有一个例子:

#!/bin/bash

while read stdinstream
do
    echo -n ${stdinstream} | tee >(parent) >(hook2) >(hook1)
done

编辑:

在您的情况下,我认为您不需要 while 循环,这可能就足够了:

read stdinstream
echo -n ${stdinstream} | tee >(parent) >(hook2) >(hook1)

希望这会对您有所帮助。

于 2013-10-21T18:06:41.653 回答