Osc*_*vis 4 bash wireless capture tee output
通常,如果我想打印命令的输出,并在文件中捕获该输出,tee就是解决方案。但我正在使用一个似乎有特殊行为的实用程序制作一个脚本。它就是wps无线评估工具bully。
如果我正常运行 bully 命令(不带 tee),输出将以标准方式逐步显示。但是,如果我将管道放在末尾这样进行记录,| tee "/path/to/my/logfile"
屏幕上的输出就会冻结。在命令结束之前它什么也不显示。结束后,它一次性显示所有内容(不是一步一步),当然它也将输出放入日志 tee 文件中。
bully 命令的示例:bully wlan0mon -b 00:11:22:33:44:55 -c 8 -L -F -B -v 3 -p 12345670 | tee /root/Desktop/log.txt
为什么?不确定这是否只发生在恶霸身上,或者是否还有其他程序具有相同的行为。
是否有另一种方法可以将输出捕获到实时在屏幕上显示输出的文件中?
您看到的是完全缓冲与行缓冲。默认情况下,当stdout
写入 tty(即交互式)时,您将进行行缓冲,否则默认情况下将进行完全缓冲。您可以查看setvbuf(3)
手册页以获得更详细的解释。
一些命令提供了强制行缓冲的选项(例如,GNU grep 有 --line-buffered)。但这种选择并不广泛可用。
如果您希望能够以更加交互的方式查看输出(当然,代价是依赖于expect),另一种选择是使用expect的unbuffer命令之类的命令。