2012-05-22 36 views
5

我是使用tee命令的新手。即使对于一个命令,即使使用tee命令

我想运行一个需要很长时间才能完成的程序,但是它会在进程中打印出信息。我正在使用'tee'将输出保存到文件中,并在shell中查看输出(bash)。

但问题是tee不会将输出转发到shell直到我的命令结束。 有没有办法做到这一点?

我正在使用Debian和bash

回答

3

这实际上取决于输出量和执行您正在运行的任何命令。没有程序有义务直接打印到stdoutstderr并且一直刷新。因此,尽管大多数C运行时实现在使用其中一个运行时例程(例如printf)写入一定数量的数据后进行刷新,但根据实现方式的不同,这可能并非如此。

tee不会立即输出它,它很可能只会在命令运行的最后阶段接收输入。它可能可能有助于提及它是哪个确切的命令。

+0

你提到了一个很好的观点!我忘了冲水。该命令是我自己的C程序之一。我在printf后添加了fflush。现在它正在工作。非常感谢您的及时帮助。 – Rakib

+0

@Rakib Hasan:现在很高兴它适合你。这是一个经常被忽视的行为,也是各种脚本语言。 – 0xC0000022L

0

如果你来发表您的使用,我可以给一个更好的答案,但因为它是

(for i in `seq 10`; do echo $i; sleep 1s; done) | tee ./tmp 

是tee命令的正确用法,似乎工作。用管道替换管道前的部件,你应该很好走。

1

您遇到的问题很可能与缓冲有关。 您可能会看看stdbuf命令,该命令执行以下操作:

stdbuf - 运行COMMAND,并修改其标准流的缓冲操作。