我的一个应用程序(假设为“A”)将其一些警报推送到 STDIN,并且该应用程序的 shell 脚本读取该 STDIN 并处理它。以同样的方式,可以有另一个应用程序(称为 B、C、D)可以将其输出推送到 STDIN。
我想知道我的第一个应用程序可以读取其他应用程序的 STDIN 推送并且数据中可能会发生冲突吗? (当我读取 A 的 STDIN 时,是否可以有 B , C STDIN 的内容?)
答案1
在这种情况下,没有有用的“A 的 STDIN”。 STDIN 始终是你的应用。 a、b 和 c 写入它们的 STDOUT,括号将它们放在一起,管道将结果连接到应用程序的 STDIN。是的,所有这些 STDOUT 都可能发生冲突(一个接一个,而不是交织在一起)。
( a ; b; c ) | yourapp
或者
( a && b && c ) | yourapp
目前尚不清楚 shell 脚本(“该应用程序的 shell 脚本”)内是否有 a、b 和 c,以及它是否是所有脚本。如果不是,那么脚本就是您的“应用程序”,并且您处于上述场景中。如果是的话,你必须有类似的东西
while ...; do
read something
a
b
c
done
在上面的场景中,“读取”将再次按顺序读取外部应用程序的通用 STDIN,如果没有任何内容可读取,则可能会阻塞,但我不知道 A 如何将任何内容推入其中。
我不能确定,但我怀疑这可能是命名管道或消息代理可能派上用场的情况。