Answers:
它们以完全不同的方式工作。
程序unbuffer使用expect运行命名命令。由于Expect会创建一个伪tty附加到子进程的stdout上,因此可能会欺骗该子进程以为它应该使用行缓冲而不是块缓冲。当isatty(stdout)为true时,某些程序会更改其行为,而其他程序则不会,并且很难知道哪个会和哪个不会。
程序stdbuf尝试将libstdbuf放在libc的前面,以动态加载二进制文件。其中,libstdbuf重新定义了libc stdio调用的默认缓冲策略。
我发现了
apt-get source expect coreutils
并阅读每个程序的相关资源。
unbuffer -p
如果将输入输入到unbuffer的进程退出,则可能似乎无法正常工作。考虑:process1 | unbuffer -p process2 | process3
如果process1退出,则process2可能尚未完成。毫无缓冲地等待很长一段时间是不可能的