一旦 grep 匹配到某些东西就停止 netcat

一旦 grep 匹配到某些东西就停止 netcat

我在脚本中使用 netcat 时遇到问题bash

我想在发送命令后匹配特定输出并尽快继续脚本执行(不等待 netcat 超时)

$> echo 'my_command' | nc -q 10 <IP> <PORT> | grep -m 1 EXPECTED_OUTPUT
# ISSUE: Closes the connection quite instantly
$> echo $?
$> 1 # grep did not get (yet) the output of nc

另一种尝试:

$> echo 'my_command' | nc -w 1 <IP> <PORT> | grep -m 1 EXPECTED_OUTPUT
Binary file (standard input) matches
# ISSUE: Wait until the timeout expires
$> echo $?
$> 0

欲了解更多信息:

如果没有命令,netcat 会打印一条横幅消息:

$>nc <IP> <PORT>                                                                                        
welcome message

我不反对其他工具(telnet,...)

我想要一个bash符合标准的解决方案。

由于预期的消息应该在一秒钟内到达,所以我使用了-w 1超时nc

答案1

你想将其设置为nc一旦grep完成就被杀死。这是一种方法:

( subshell_pid=$BASHPID ; echo 'my_command' | nc $IP $PORT > >(grep -m 1 EXPECTED_OUTPUT ; kill -13 -- -$subshell_pid ; ) )

这一切都在子 shell 中运行,然后在grep完成时杀死由子 shell 启动的所有进程。

>()流程替代,它允许您从一个命令传输到多个命令。

相关内容