linux – Bash输出流写入文件

linux – Bash输出流写入文件,第1张

概述所以我在bash上运行这个: # somedevice -getevent 这个命令的作用就是它一直在运行,每当我的设备发送某个数据时,说它检测到温度的变化,它输出这样的东西 /dev/xyz: 123 4567 8910112238 20/dev/xyz: 123 4567 8915712347 19/dev/xyz: 123 4567 8916412345 22/dev/xyz: 123 所以我在bash上运行这个:

# somedevice -getevent

这个命令的作用就是它一直在运行,每当我的设备发送某个数据时,说它检测到温度的变化,它输出这样的东西

/dev/xyz: 123 4567 8910112238 20/dev/xyz: 123 4567 8915712347 19/dev/xyz: 123 4567 8916412345 22/dev/xyz: 123 4567 8910312342 25/dev/xyz: 123 4567 8910112361 18/dev/xyz: 123 4567 8910112343 20

这只是一直运行,一旦有任何原因它输出一些东西.所以执行无止境.

没有回声是完美的,但是当我尝试使用’>’时运算符这似乎没有写入文件.

所以举个例子

#somedevice -getevent > my_record_file

这不能正常工作,my_record_file只能间隔地写入数据,但是我想立即写入.

有任何想法吗?

解决方法 输出正在缓冲,因为C标准库根据stdout是否是终端设备来更改输出缓冲模式.如果它是终端设备(根据 isatty(3)),则stdout是行缓冲的:每次写入换行符时都会刷新它.如果它不是终端设备,那么它是完全缓冲的:只有在写入一定数量的数据(通常大约为4 KB到64 KB)时才会刷新它.

因此,当您使用shell的>将命令的输出重定向到文件时重定向 *** 作符,它不再输出到终端并缓冲其输出.程序可以使用setvbuf(3)和朋友更改其缓冲模式,但程序必须合作才能执行此 *** 作.许多程序具有命令行选项以使它们进行行缓冲,例如,grep(1)的–line-buffered选项.看看你的命令是否有类似的选项.

如果您没有这样的选项,可以尝试使用诸如unbuffer(1)之类的工具来解除输出流的缓冲,但它并不总是有效并且不是标准实用程序,因此它并不总是可用.

总结

以上是内存溢出为你收集整理的linux – Bash输出流写入文件全部内容,希望文章能够帮你解决linux – Bash输出流写入文件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/1021114.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存