我是使用tee
命令的新手。即使对于一个命令,即使使用tee命令
我想运行一个需要很长时间才能完成的程序,但是它会在进程中打印出信息。我正在使用'tee'将输出保存到文件中,并在shell中查看输出(bash
)。
但问题是tee
不会将输出转发到shell直到我的命令结束。 有没有办法做到这一点?
我正在使用Debian和bash
。
我是使用tee
命令的新手。即使对于一个命令,即使使用tee命令
我想运行一个需要很长时间才能完成的程序,但是它会在进程中打印出信息。我正在使用'tee'将输出保存到文件中,并在shell中查看输出(bash
)。
但问题是tee
不会将输出转发到shell直到我的命令结束。 有没有办法做到这一点?
我正在使用Debian和bash
。
这实际上取决于输出量和执行您正在运行的任何命令。没有程序有义务直接打印到stdout
或stderr
并且一直刷新。因此,尽管大多数C运行时实现在使用其中一个运行时例程(例如printf
)写入一定数量的数据后进行刷新,但根据实现方式的不同,这可能并非如此。
它tee
不会立即输出它,它很可能只会在命令运行的最后阶段接收输入。它可能可能有助于提及它是哪个确切的命令。
如果你来发表您的使用,我可以给一个更好的答案,但因为它是
(for i in `seq 10`; do echo $i; sleep 1s; done) | tee ./tmp
是tee命令的正确用法,似乎工作。用管道替换管道前的部件,你应该很好走。
您遇到的问题很可能与缓冲有关。 您可能会看看stdbuf命令,该命令执行以下操作:
stdbuf - 运行COMMAND,并修改其标准流的缓冲操作。
你提到了一个很好的观点!我忘了冲水。该命令是我自己的C程序之一。我在printf后添加了fflush。现在它正在工作。非常感谢您的及时帮助。 – Rakib
@Rakib Hasan:现在很高兴它适合你。这是一个经常被忽视的行为,也是各种脚本语言。 – 0xC0000022L