我正在尝试运行以下命令
./someprogram | tee /dev/tty | sed 's/^.\{2\}//' > output_file
Run Code Online (Sandbox Code Playgroud)
但是当我去检查时,文件总是空白的.如果我> output_file从命令的末尾删除,我能够看到sed的输出没有任何问题.
有没有办法可以将此命令中sed的输出重定向到文件?
sed使用-u标志从命令中删除output-buffering,并确保要记录的内容不在stderr上
-u, - unbuffered
Run Code Online (Sandbox Code Playgroud)load minimal amounts of data from the input files and flush the output buffers more often
最终命令:
./someprogram | tee /dev/tty | sed -u 's/^.\{2\}//' > output_file
Run Code Online (Sandbox Code Playgroud)
这种情况发生在流(通常是一个程序在整个生命周期内将输出发送到stdout).
sed/ grep和其他命令在这些情况下做一些缓冲,你必须明确禁用它,以便在程序仍在运行时能够输出.