2016-12-07 49 views
1

通常,如果我想打印命令的输出并且另外在文件中捕获该输出,则可以使用tee作为解决方案。但我正在使用一个似乎有特殊行为的工具来制作脚本。这是wps无线评估工具欺负直到cmd完成后tee输出才会出现

如果我正常运行bully命令(没有tee),输出将以标准方式逐步显示。但是,如果我把管道放在最后以这种方式登录| tee "/path/to/my/logfile",屏幕上的输出会冻结。它直到命令结束才显示任何内容。结束后,它显示了所有内容(不是一步一步地),当然它也将输出放在日志文件中。

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

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

是否有另一种方法来捕获输出到屏幕上实时输出的文件中?

+1

可能的原因:当标准输出未连接到终端(如管道)时,欺负将输出缓冲更改为*完全缓冲*。 – Jens

+0

请参见[如何使输出的任何shell命令无缓冲?](http://stackoverflow.com/q/3465619/4154375)。 – pjh

回答

2

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

某些命令提供了强制行缓冲的选项(例如,GNU grep具有行缓冲)。但是这种选择并不普遍。

如果您希望能够更加交互式地查看输出(当然,取决于期望的代价),另一种选择是使用类似expect的unbuffer命令。

+1

是的,在命令前使用unbuffer做了诀窍......现在它逐步显示屏幕上的输出并使用“行缓冲”保存到文件,所以我的命令是:'unbuffer bully wlan0mon -b 00: 11:22:33:44:55 -c 8 -L -F -B -v 3 -p 12345670 | tee/root/Desktop/log.txt“ – OscarAkaElvis

相关问题