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予想されるメッセージは1秒以内に到着する必要があるため、タイムアウトを使用しました。nc

ベストアンサー1

nc完了したらgrep死ぬように設定したいと思います。 1つの方法は次のとおりです。

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

これらはすべて、サブシェルで実行され、grep完了すると、サブシェルによって開始されたすべてのプロセスを終了します。

>()これはプロセスの交換, 1 つのコマンドから複数のコマンドに転送できます。

おすすめ記事