我有一个长时间运行的批处理进程,它将一些调试和进程信息输出到标准输出。如果我只是从终端运行,我可以跟踪“它在哪里”,但是数据会变得太多并从屏幕上滚动。
如果我重定向到输出到文件 '> out.txt' 我最终会得到整个输出,但它被缓冲了,所以我现在看不到它在做什么。
有没有办法重定向输出但使其不缓冲其写入?
Edu*_*nec 62
您可以使用setvbufC 中的调用显式设置标准流的缓冲选项(请参阅此链接),但是如果您尝试修改现有程序的行为,请尝试stdbuf(coreutils显然是从 7.5 版开始)。
这stdout最多缓冲一行:
stdbuf -oL command > output
Run Code Online (Sandbox Code Playgroud)
这stdout完全禁用缓冲:
stdbuf -o0 command > output
Run Code Online (Sandbox Code Playgroud)
小智 9
您可以使用如下script命令实现行缓冲输出到文件:
stty -echo -onlcr # avoid added \r in output
script -q /dev/null batch_process | tee output.log # Mac OS X, FreeBSD
script -q -c "batch_process" /dev/null | tee output.log # Linux
stty echo onlcr
Run Code Online (Sandbox Code Playgroud)
我发现的最简单的解决方案(不需要安装任何第三方软件包)在Unix 和 Linux站点上的一个类似线程中提到:使用script命令。它很旧,可能已经安装了。
$ script -q /dev/null long_running_command | print_progress # FreeBSD, Mac OS X
$ script -q -c "long_running_command" /dev/null | print_progress # Linux
Run Code Online (Sandbox Code Playgroud)
请注意,该script命令的第一个文件名参数是要写入的日志文件。如果您只是运行script -q your_command,您将覆盖您缩进以使用日志文件运行的命令。man script为安全起见,在尝试之前先检查一下。
| 归档时间: |
|
| 查看次数: |
69665 次 |
| 最近记录: |