Grep

一旦 grep 匹配某些內容,就停止 netcat

  • February 3, 2019

我在bash腳本中使用 netcat 時遇到問題。

我想在發送命令後匹配特定的輸出並儘快繼續執行腳本(不等待 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

您想對其進行設置,以便在完成nc後立即被殺死grep。這是一種方法:

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

這一切都在一個子shell中執行,然後在完成時終止子shell啟動的所有程序grep

>()is程序替換,它允許您從一個命令到多個命令。

引用自:https://unix.stackexchange.com/questions/497957