2つのコマンドを実行し、ファイルに追加し、コンソールにコマンド出力を表示しますが、コマンドは1つだけです

2つのコマンドを実行し、ファイルに追加し、コンソールにコマンド出力を表示しますが、コマンドは1つだけです

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

説明する:

  1. nmapを実行します。
  2. nmapの出力は、/dev/stderrファイル(標準エラー)とstdoutの両方に送信されます。
  3. 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

使用しているシェルがプロセスのオーバーライドをサポートしていると仮定すると、次のコマンドのリダイレクトを>(...)使用できます。teetxt2html

nmap localhost | tee >(txt2html -extract -8 >>some-file)

ここでは、txt2htmlから入力を取得しteeて出力を追加しますsome-file

txt2htmlを書き込むことに加えて、tee端末に接続できる標準出力ストリームに生の入力を書き込みます。

この場合、すべての診断出力はnmapバイパスされてtee端末txt2htmlに直接送信されます。これを処理するには、2>&1標準エラーストリームが標準出力ストリームと共にリダイレクトされるように、パイプの左側でコマンド出力をリダイレクトします。

関連情報