nmapなどのLinuxコマンドを実行し、入力をtxt2htmlコマンドに渡してファイルに追加しようとしますが、nmapコマンドの出力のみを表示します。提供されたコマンドは動作しますが、txt2html出力を出力するので、端末にnmap出力を表示したいと思います。これを行う方法はありますか?
nmap localhost | txt2html -extract -8 | tee -a file_to_append
答え1
私はこれがあなたが望むものだと思います。
nmap localhost | tee /dev/stderr | txt2html -extract -8 >> file_to_append
説明する:
- nmapを実行します。
- nmapの出力は、/dev/stderrファイル(標準エラー)とstdoutの両方に送信されます。
- txt2html は前のステップで stdout を読み込み、その出力を file_to_append に追加します。 stderrorはリダイレクトされないため、コンソールに表示する必要があります。
以下は、いくつかのダミーコマンドを含む出力がない例です。
$ echo hi | tee /dev/stderr | sed "s/hi/bye/" > /tmp/test.txt
hi
$ cat /tmp/test.txt
bye
端末出力が保存された内容と異なることを確認できます。
答え2
使用しているシェルがプロセスのオーバーライドをサポートしていると仮定すると、次のコマンドのリダイレクトを>(...)
使用できます。tee
txt2html
nmap localhost | tee >(txt2html -extract -8 >>some-file)
ここでは、txt2html
から入力を取得しtee
て出力を追加しますsome-file
。
txt2html
を書き込むことに加えて、tee
端末に接続できる標準出力ストリームに生の入力を書き込みます。
この場合、すべての診断出力はnmap
バイパスされてtee
端末txt2html
に直接送信されます。これを処理するには、2>&1
標準エラーストリームが標準出力ストリームと共にリダイレクトされるように、パイプの左側でコマンド出力をリダイレクトします。