grep は nc 出力と一致しません - tee は出力を返しません

grep は nc 出力と一致しません - tee は出力を返しません

grepがstderrでnetcatの出力を受け入れないという元のQ&Aを参照してください。以前の StackExchange 投稿

簡潔な回答です。気に入りました。端に T 字継手を追加しても出力が生成されないのはなぜですか?

nc -zvv localhost 3100-3200 2>&1 | grep succeeded | tee test.txt

tee のみを使用すると機能します。grep のみを使用すると機能します。grep の後に tee を連鎖すると、出力 (コンソールまたはファイル) は生成されません。

何か案は?

答え1

デビラN、クサラナンダ、

ありがとうございます。私の焦りとgrepとncの動作が重なって、このような結果になりました。Raspberry Piで以下のコマンドを実行すると、

nc -nvw1 127.0.0.1 1-65535 2>&1 | grep succeeded | tee test.txt

すべてのポートがスキャンされ、コンソールに 6 つの開いているポートが出力されました。--line-buffered オプションを使用すると、コマンドは期待どおりに動作しました (見つかったポートがそのまま出力されました)。

また、grep のバッファリング動作は、明らかに tee にパイプされた場合にのみ発生します。tee が使用されず、--line-buffered が使用されていない場合でも、grep は見つかった開いているポートを出力します。

-w1 オプションがない場合、最初の開いているポートが grep によってコンソールに出力されますが、その後出力がハングします。この場合、実際にハングするのは nc の出力です。

関連情報