我正在寻找一种工具来一次读取几个fifo(可能使用select(2)
)并输出所读取的内容,当所有fifo关闭时关闭流。更精确地说,program
的行为如下:
$ mkfifo a b
$ program a b > c &
$ echo 'A' > a
$ echo 'B' > b
[1] + done program a b > c
$ cat c
A
B
$ program a b > c &
$ echo 'B' > b
$ echo 'A' > a
[1] + done program a b > c
$ cat c
B
A
我的第一次尝试是使用cat
,但第二个例子将不起作用(echo 'B' > b
将挂起),因为cat
按顺序读取每个参数,而不是同时读取。在这种情况下使用什么工具是正确的?
tail会这样做。
使用:
tail -q -n +1 a b
编辑:对不起,这不起作用。我看看能不能找到别的。
对不起,我找不到任何东西。
如果你不想自己编程,那么我的建议是多个命令:
#!/bin/sh
rm c
cat a >> c &
cat b >> c &
wait
你可能会得到一些交错,但其他一切都应该工作良好。等待是为了防止程序退出,直到所有的cat程序都完成(以防在完成所有操作后需要运行一些命令)。rm是为了确保c开始为空,因为cat命令附加到文件中。