将多个流复用为单个流 - Bash

将多个流复用为单个流 - Bash

我有这个问题有一段时间了。

设想
我想做的是使用 CLI 运行一个程序。该程序一次接受一个命令并执行它。大多数时候这些命令是批量执行的。因此,在一个流上捕获一系列命令会非常有效,但我也想通过键盘发送一些附加命令来不时进行手动干预。

我尝试解决它
我使用了一个命名管道,如下所示,并将它们全部重定向到相同的文件描述符,如下所示。

先进先出

$ mkfifo /tmp/testpipe
$ mknod /tmp/testpipe p

重定向

{ cat /tmp/testpipe &
  cat - &
  wait; } | consumer_process

在此输入图像描述

参考:是否有与“tee”相反的功能,将多个管道连接在一起?

问题
通过上面解释的设置,当我第一次将某些内容推入命名管道时,它按预期工作正常,但第二次当我将某些内容推入管道时,它不会到达消费者进程。

尝试修复问题失败
尝试在另一端捕获命名管道和回显。第一次成功了,但第二次就不行了。

第一学期

cat /tmp/testpipe &

第二学期

echo "TESTING123" > /tmp/testpipe   --> Received on term 1
echo "TESTING123" > /tmp/testpipe   --> Nothing received on term 1

有没有办法解决这个问题或者以更简单的方式完成这个任务?

相关内容