我正在尝试运行以下命令
./someprogram | tee /dev/tty | sed 's/^.\{2\}//' > output_file
但是当我去检查时,文件总是空白的。如果我从命令的末尾删除> output_file
,我可以看到sed的输出没有任何问题。
有没有办法可以将此命令中sed的输出重定向到文件?
答案 0 :(得分:5)
使用sed
标志从-u
命令中删除输出缓冲,并确保您要记录的内容不在stderr上
-u, - unbuffered
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
这会发生在流中(通常是程序在整个生命周期内将输出发送到stdout)。
sed
/ grep
和其他命令在这些情况下执行一些缓冲,您必须明确禁用它才能在程序运行时获得输出。
答案 1 :(得分:1)
你有一个Stderr&标准问题。结帐此主题的In the shell, what does " 2>&1 " mean?。应该解决你的问题。