运行 2 个命令,附加到文件并在控制台上显示命令输出,但只有一个命令

运行 2 个命令,附加到文件并在控制台上显示命令输出,但只有一个命令

我正在尝试运行 Linux 命令,例如 nmap 并将输入传递到 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

假设您使用的 shell 支持使用 进行进程替换>(...),那么您可以使用tee重定向到该txt2html命令:

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

在这里,txt2html从 获取其输入tee并将其输出附加到some-file

除了写入 之外txt2htmltee还将其原始输入写入标准输出流,该流可能会连接到终端。

在这种情况下,任何诊断输出nmap都会绕过teetxt2html并直接发送到终端。如果您想处理此问题,请在管道左侧重定向命令的输出,以便2>&1其标准错误流与标准输出流一起重定向。

相关内容