通常,如果我想打印命令的输出并另外捕获文件中的输出, 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"
为什么呢?不确定它是否只发生在恶霸或是否有其他程序具有相同的行为。
是否有其他方法可以将输出捕获到实时显示输出的文件中?
答案 0 :(得分:2)
您所看到的是完全缓冲与线路缓冲。默认情况下,当stdout
写入tty(即交互式)时,您将进行行缓冲,否则将默认为完全缓冲。您可以在setvbuf(3)
手册页中找到更详细的说明。
某些命令提供强制行缓冲的选项(例如,GNU grep具有--line-buffered)。但是这种选择并不广泛。
另一种选择是使用期望的unbuffer命令,如果你希望能够更加交互地看到输出(当然,这取决于期望)。