【问题标题】:tee output not appearing until cmd finishes在 cmd 完成之前不会出现 tee 输出
【发布时间】:2016-12-07 20:12:26
【问题描述】:

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

如果我正常运行欺负命令(不带 tee),输出会以标准方式逐步显示。但是如果我把管道放在最后记录这样| tee "/path/to/my/logfile",屏幕上的输出就会冻结。在命令结束之前它什么都不显示。结束后,它会一次性显示所有内容(不是一步一步),当然它也会将输出放在日志 tee 文件中。

欺负命令示例:bully wlan0mon -b 00:11:22:33:44:55 -c 8 -L -F -B -v 3 -p 12345670 | tee /root/Desktop/log.txt

为什么?不确定它是否只发生在欺负者身上,或者是否有其他程序具有相同的行为。

是否有另一种方法可以将输出捕获到文件中,并在屏幕上实时显示输出?

【问题讨论】:

标签: bash output capture wireless tee


【解决方案1】:

您看到的是完全缓冲与行缓冲。默认情况下,当stdout 正在写入 tty(即交互式)时,您将拥有行缓冲,否则默认情况下会被完全缓冲。您可以查看setvbuf(3) 手册页以获得更详细的说明。

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

另一个选择是使用类似 expect 的 unbuffer 命令,如果您希望能够以交互方式查看输出(当然,代价是依赖于 expect)。

【讨论】:

  • 是的,在命令前面使用 unbuffer 就可以了……现在它逐步在屏幕上显示输出并使用“行缓冲”保存到文件中,所以我的命令是:@ 987654324@
猜你喜欢
  • 1970-01-01
  • 2015-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
  • 2016-12-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多