bash标准输出无法重定向到文件

阮浩

我正在阅读“高级bash脚本”,在第31章中有问题。我想不明白。

tail -f /var/log/msg | grep 'error' >> logfile

为什么什么都没有输出到日志文件?
你能给我一个解释吗?先感谢您

数字创伤

正如@chepner所说,grep正在使用更大的缓冲区(也许4k或更多)来缓冲其stdout。管道或重定向到文件时,大多数标准实用程序都会执行此操作。它们通常仅在直接输出到终端时才切换到行缓冲模式。

您可以使用该stdbuf实用程序强制grep对其输出进行行缓冲:

tail -f /var/log/msg | stdbuf -oL grep 'error' >> logfile

为了容易观察到这种效果,您可以尝试以下两个命令:

for ((i=0;;i++)); do echo $i; sleep 0.001; done | grep . | cat

for ((i=0;;i++)); do echo $i; sleep 0.001; done | stdbuf -oL grep . | cat

在第一个命令中,来自grep .(即匹配所有行)的输出被缓冲到管道中cat在我看来,缓冲区大约为4k。chunks随着缓冲区被填充然后刷新,您将看到升序输出

在第二个命令中,grep到管道to的输出cat是行缓冲的,因此您应该看到每行的终端输出,即或多或少的连续输出。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将标准输出重定向到文件

来自分类Dev

将输出重定向到标准输出而不是文件

来自分类Dev

无法将输出重定向到文件

来自分类Dev

Bash将标准输出重定向到功能

来自分类Dev

如何将Jmeter标准输出重定向到文件

来自分类Dev

如何使用重定向到bash脚本标准输入的文件?

来自分类Dev

无法将bash输出重定向到变量文件名

来自分类Dev

将标准输出重定向到整数

来自分类Dev

将错误重定向到标准输出

来自分类Dev

在 VBS 中重定向到标准输出

来自分类Dev

将我的bash的输出重定向到日志文件

来自分类Dev

Bash将输出重定向到tty和文件

来自分类Dev

将我的bash的输出重定向到日志文件

来自分类Dev

Bash将输出重定向到tty和文件

来自分类Dev

Bash脚本:将慢速命令的输出重定向到文件

来自分类Dev

通过bash将输出重定向到文件

来自分类Dev

无法将Perl脚本的输出重定向到文件

来自分类Dev

无法将crontab -l的输出重定向到文件

来自分类Dev

无法将控制台输出重定向到文件

来自分类Dev

无法重定向文件的输出

来自分类Dev

如何将标准输出重定向到标准错误

来自分类Dev

将标准输入重定向到标准输出

来自分类Dev

在 bash 脚本中重定向标准输入和标准输出

来自分类Dev

Windows Batch-如何在将标准输出重定向到文件时添加时间戳

来自分类Dev

将STDOUT和STDERR重定向到文件,但system()的标准输出/错误除外

来自分类Dev

为什么我不能将python脚本的标准输出重定向到文件

来自分类Dev

将management.call_command()标准输出重定向到文件

来自分类Dev

C将标准输出重定向到带有预定义消息的文件

来自分类Dev

如何将标准输出重定向到文件-此代码有什么问题?

Related 相关文章

热门标签

归档