Bash 如何在没有缓冲区的情况下保存tty?

Bash 如何在没有缓冲区的情况下保存tty?,bash,stdout,unbuffered-output,Bash,Stdout,Unbuffered Output,我的缓冲区有问题: 我有一个守护进程D和它的监视器M。 D在M之前启动,M将任何相关信息打印到tty,我需要解析这些信息并将其提供给我自己的程序 因为我想自动化这个,所以M应该打印到一个文件中。但由于缓冲区的原因,在守护进程被杀死之前不会发生 所以我想录制tty,因此尝试使用脚本将输出录制到终端,但。。。它也被缓冲了 我还尝试访问gnu coreutils(使用我显然需要的stdbuf),但当我无法安装该实用程序来解压缩gnu网站上建议的特殊.xz格式时,我不得不放弃 我担心我做的都不对! 对于

我的缓冲区有问题:

我有一个守护进程D和它的监视器M。 D在M之前启动,M将任何相关信息打印到tty,我需要解析这些信息并将其提供给我自己的程序

因为我想自动化这个,所以M应该打印到一个文件中。但由于缓冲区的原因,在守护进程被杀死之前不会发生

所以我想录制tty,因此尝试使用脚本将输出录制到终端,但。。。它也被缓冲了

我还尝试访问gnu coreutils(使用我显然需要的stdbuf),但当我无法安装该实用程序来解压缩gnu网站上建议的特殊.xz格式时,我不得不放弃

我担心我做的都不对! 对于这个问题,难道没有一个简单的解决方案,可能是每个使用实时的人都有过的吗

如果你能帮我一点忙,我将不胜感激。谢谢

  • 可以使用或提取.xz文件格式
  • 似乎有一个LD_预加载黑客也实现了同样的结果:
  • 本页是我关于stdio缓冲的首选参考:


    另外,“每个使用实时的人”大概都使用IPC,不依赖bash。Perl、python和所有较低级别的语言都提供了明确禁用/启用缓冲的方法。嗨,让我头疼的不是.xz,而是解压工具(xz…)没能安装到我的机器上。但是我回到了存储库,发现了一个打包得很好的.tar.gz。我已经看到了您提供给我的两个链接(或等效链接),但不知道如何将其应用于我的问题。我会重新阅读它们。好的,所以我设法安装了stdbuf,这正是我所需要的!我使用stdbuf-oL作为我的守护进程及其监视器的前缀。我想我还是错过了一部分实际录音(1行),但这不是重要的信息,所以我暂时考虑一下。感谢您的指导,重新阅读pixelbeat页面,我终于明白了为什么要使用libc,stdbuf技巧非常有效;)编辑:stdbuf基于您提到的LD_PRELOAD hack。