我正在寻找一种工具来同时读取几个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
按顺序从每个参数读取,而不是同时读取。在这种情况下使用的正确工具是什么?
答案 0 :(得分:0)
尾巴会这样做。
使用:
tail -q -n +1 a b
编辑:抱歉,这不起作用。我会看看能不能找到别的东西。
抱歉,我找不到任何东西。
如果您不想自己编程,那么我的建议就是多个命令:
#!/bin/sh
rm c
cat a >> c &
cat b >> c &
wait
你可能会得到一些交错,但否则一切都应该正常。等待是为了防止程序退出,直到完成所有cat程序(以防万一你需要在完成所有操作后运行某些命令)。并且rm是为了确保c开始为空,因为cat命令附加到文件。