Grep
一旦 grep 匹配某些內容,就停止 netcat
我在
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程序替換,它允許您從一個命令到多個命令。