原因

原因

我有这个:

 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 | process2process2也不会得到任何输入。

在第二个示例中,管道在存在之前无法连接。所有管道必须在流程开始之前完成。现在没有办法让进程发出信号来进行管道连接。而且没有比自行完成的过程更简单的了。

相关内容