java是否可以通过stdin数据流的第一个字节触发bash命令来运行?
我有以下管道bash命令:
command_1 | command_2 | command_3
其中command_1
正在等待生成数据流,该数据流触发command_2
开始处理它,然后将处理数据流发送到command_3
问题是我不知道command_1
何时启动,并且command_2
不能在数据流到达之前启动(否则command_2
将失败,因为没有数据要处理)command_3
在这种情况下并不特殊
我想知道command_2
可以在一个bash/python/java脚本中执行,该脚本等待从command_1
读取标准数据流的第一个字节,然后该第一个字节将触发command_2
的开始执行,该脚本需要处理第一个字节和标准数据流的剩余连续字节(command_2
不应跳过{
这个command_2
逻辑可以在脚本中实现吗。有什么想法吗
# 1 楼答案
我猜这是一个bash管道。如果是这样,我认为你误解了这些管道的执行方式
|
都被创建为一个输入输出缓冲区李>2.1. std in>;命令1>;缓冲区1
2.2. 缓冲区1>;命令2>;缓冲区2 2.3缓冲器2>;命令3>;性病发作
当}还没有写入数据这一事实不是问题
command_2
“读取”数据时,它将在buffer_1
上阻塞,直到数据在那里可用。它将在收到EOF信号时结束其进程。{# 2 楼答案
是的,这是可能的,例如,在python中,您只需阅读stdin:
根据您的用例,您可能需要刷新输出,因此您可以执行以下操作,而不是打印:
'received {line}'
将被传递给命令_3# 3 楼答案
一些读者显然没有满足您的要求,即在管道数据可用之前不启动:
command_2
,因为否则会超时。使用这个脚本非常简单,我将其称为^{它只是等待输入就绪,然后执行给定的命令。用法,例如: