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 の出力です。