我正在尝试运行 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
解释:
- 你运行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
假设您使用的 shell 支持使用 进行进程替换>(...)
,那么您可以使用tee
重定向到该txt2html
命令:
nmap localhost | tee >(txt2html -extract -8 >>some-file)
在这里,txt2html
从 获取其输入tee
并将其输出附加到some-file
。
除了写入 之外txt2html
,tee
还将其原始输入写入标准输出流,该流可能会连接到终端。
在这种情况下,任何诊断输出nmap
都会绕过tee
和txt2html
并直接发送到终端。如果您想处理此问题,请在管道左侧重定向命令的输出,以便2>&1
其标准错误流与标准输出流一起重定向。