在cmd完成之前,三通输出不会出现

时间:2016-12-07 20:12:26

标签: bash output capture wireless tee

通常,如果我想打印命令的输出并另外捕获文件中的输出, tee 就是解决方案。但我正在使用一个似乎有特殊行为的实用程序制作脚本。这是wps无线评估工具欺负

如果我正常运行欺凌命令(没有tee),输出将以标准方式逐步显示。但是,如果我将管道放在最后进行记录,就像这样| AMOUNT | PAY_TYPE | | 0.50 | A | | 0.50 | A | | 0.10 | D | | 0.50 | A | | 0.50 | A | | 0.50 | A | ,屏幕上的输出会冻结。在命令结束之前它什么都没显示。结束后,它会一次性显示所有内容(不是一步一步),当然它也会将输出放在日志文件中。

欺凌命令的示例:| tee "/path/to/my/logfile"

为什么呢?不确定它是否只发生在恶霸或是否有其他程序具有相同的行为。

是否有其他方法可以将输出捕获到实时显示输出的文件中?

1 个答案:

答案 0 :(得分:2)

您所看到的是完全缓冲与线路缓冲。默认情况下,当stdout写入tty(即交互式)时,您将进行行缓冲,否则将默认为完全缓冲。您可以在setvbuf(3)手册页中找到更详细的说明。

某些命令提供强制行缓冲的选项(例如,GNU grep具有--line-buffered)。但是这种选择并不广泛。

另一种选择是使用期望的unbuffer命令,如果你希望能够更加交互地看到输出(当然,这取决于期望)。