如何保存控制台输出仍然显示它


3

我需要对telnet会话进行故障排除并将其结果发送给另一个人。当我使用重定向时,我保存了会话的内容,但是我无法在控制台上看到它。

如何管道当前终端/程序,仍然在当前控制台上显示它。

当我使用下面的命令时,我可以保存程序的输出,但我无法在控制台上看到它。

telnet ADDRESS PORT >> myoutputfile

我可以使用telnet输出选项,我正在寻找一种独立于命令的方法来实现它。

该问题特定于telnet会话,但适用于任何其他命令,包括那些没有“保存输出到文件选项”的命令。

Answers:


6

最简单的解决方案是使用 tee: -

telnet ADDRESS PORT | tee -a myoutputfile

这会将输出复制到标准输出和指定的文件名,以及 -a 选项附加,就像你的 >> 重定向确实。


一个小问题:^]序列(转义字符)在使用tee时不起作用。
Rafael Borja

1
那可能是因为 telnet 在写入时在输出中进行转换 stdout,在这种情况下不是。你可以试试追加 | cat -v 命令,但只有当输出中有换行符时才显示行。
AFH

无论如何,这是一个小问题。谢谢!
Rafael Borja

1

有一个技巧可以将错误输出用作第二个缓冲区输出到2个设备。

你的命令是:

telnet ADDRESS PORT >&2 2>>myoutputfile

这会将输出附加到myoutputfile,并将所有内容写入控制台。

>&2:这将流1(控制台)的输出复制到流2(错误)

2>>:这可以确保将来自流2的所有内容发送到该文件。

如果您不希望冒险将错误日志添加到文件中,请在两行中更改2到3。 ( >&3 3>>file

编辑:我刚刚注意到了linux标签。这是为Windows编写的,但它可能仍然有效。


这是有道理的,但不适用于telnet会话(我键入telnet命令,但我无法读取响应)
Rafael Borja

1
>&2 重定向输出:它不会复制它。您的命令与提问者具有相同的效果,但错误消息也会转到文件而不是显示在控制台上。
AFH

@AFH在windows&意味着复制流。我测试了它,在Windows上它确实有效。
LPChip

对不起,这些天我已经习惯了Linux语法。
AFH
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.