当通过管道传输到 tee 时,sed 的输出会提前中断

Output of sed is cut off early when piped to tee

我预计:

  1. cat file.txt | sed s/a/b/ > /tmp/tmp.txt && sudo cp /tmp/tmp.txt file.txt

  1. cat file.txt | sed s/a/b/ | sudo tee file.txt > /dev/null

file.txt 中产生相同的结果,但由于某些原因,当 file.txt 相当大(见 10 000 000 字节)时,file.txt 的结果写入在 262 144 处被截断字节与第二个片段 (2).

我希望这里有某种缓冲在起作用,但我希望第二个代码段能够工作。还是我弄错了管道 catsedtee 的工作方式?

想法是 file.txt 是 root 拥有的,因此我需要对 tee 命令执行 sudo 才能写回该位置。

这是一个重复的问题。

已回答 here, and here。在不同的论坛。

答案是使用您安装的命令 unbufferstdbuf