我有一个长时间运行的批处理过程,它会将一些调试和进程信息输出到标准输出。如果我只是从终端运行,我可以跟踪“它在哪里”,但随后数据会变得太多并滚出屏幕。
如果我将输出重定向到文件“> out.txt”,我最终会得到整个输出,但它被缓冲了,所以我无法再看到它现在在做什么。
有没有办法重定向输出但又不缓冲其写入?
答案1
答案2
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
答案3
在 Ubuntu 上,unbuffer
程序(来自expect-dev
)包为我解决了这个问题。只需运行:
unbuffer your_command
并且它不会缓冲它。
答案4
尝试该script
命令;如果您的系统有该命令,它将以文件名作为参数,所有转储到 stdout 的文本都将复制到该文件中。当安装程序需要交互时,它非常有用。