如何延迟管道 netcat 在第一个输入上进行连接

Bal*_*int 1 linux pipe netcat

Ubuntu下bash运行:

我有一个源可以生成一些输出,但不是立即生成。让我们假设它是第一个在套接字上侦听的 netcat:netcat -l 12345

我想将其通过管道传输到传出的 netcat(通过 TCP 连接),例如netcat -l 12345 | netcat localhost 54321。但棘手的一点是,我知道当我运行命令时,本地主机 54321 上没有任何东西监听传入连接,但我知道当第一个实际字符通过管道到达时将会有一个监听。

所以我的问题是:有没有办法:

  • 延迟执行传出的 netcat,直到第一个字符到达管道,或者
  • 延迟传出的 netcat 尝试建立 TCP 连接,直到它收到标准输入上的第一个字符?(在 man 中没有直接选项,切换到 UDP 是不可接受的)

提前致谢!

编辑:实际上,源比 netcat 更复杂,即它是一个通过各种流修改进行管道传输的监听 netcat。

mar*_*iux 5

使用您已经做过的研究以及我评论过的研究(不知道这是对您自己问题的答案),以下是完整的delayed_netcat.sh

#!/bin/bash
read line
netcat "${@}" < <(echo $line ; cat)
Run Code Online (Sandbox Code Playgroud)

首先等待一行输入,然后使用简单的echo“新生成”输入将该行添加到实际的netcat. stdin 的其余部分只是使用cat它进行重定向stdin,并将其添加到 的输入中netcat。它还支持将命令行选项和参数传递给“real” netcat

用法如下:

netcat -l 12345 | cmd1 | cmd2 | ... | ./delayed_netcat.sh localhost 54321
Run Code Online (Sandbox Code Playgroud)

延迟netcat直到读取第一行。如果您确实想在读取第一个字符后开始它,readecho需要一些重写。