我有这个:
tail -f "${my_input}" | ql_receiver_lock_holder > "${my_named_pipe}" & disown;
但读完这个答案后: 第一个数据写入管道(是否一致)
我感觉 ${my_named_pipe} 永远不会从 ${my_input} 文件接收任何数据。
我知道如何解决这个问题的唯一方法是这样的:
tail -f "${my_input}" | ql_receiver_lock_holder | while read line; do
echo "$line" > ${my_named_pipe};
done & disown;
还有另一种方法可以做到这一点吗?
答案1
如果my_named_pipe
一开始就存在:即ql_receiver_lock_holder
不创建它,那么它将起作用,否则它将不起作用。
在下面的示例中,我删除了所有不相关的内容。这个问题很笼统,所以答案也很笼统。
这将起作用:
a-process | another-process > "${my_named_pipe}"
这不会:
a-process | another-process-that-also-creates-the-pipe > "${my_named_pipe}"
原因
在第一个中,没有什么可以阻止它工作。问题中链接的问题是指重定向标准输入(而不是标准输出)。同样process1 > a-file | process2
,process2
也不会得到任何输入。
在第二个示例中,管道在存在之前无法连接。所有管道必须在流程开始之前完成。现在没有办法让进程发出信号来进行管道连接。而且没有比自行完成的过程更简单的了。