有没有一种方法可以重定向程序的输出并将其输出到stdout?


24

好的。如果我想将程序的输出重定向到文件,请执行以下操作

prog > file

如果我想将stdout和stderr都重定向到该文件,那么我会做

prog > file 2>&1

如果您希望输出到文件中,这一切都很好。但是,如果您希望输出转到文件中却仍然转到stdout / stderr,该怎么办?因此,输出保存在文件中,但是当程序正在运行时,您仍然可以在控制台上看到它。有没有办法做到这一点?如果是这样,怎么办?


术语:您是说并且仍然要去终点站stdout是文件描述符1,foo > some_file表示打开的只写文件描述符some_file是foo的标准输出。stdout始终转到stdout。
彼得·科德斯

Answers:


39

tee为此目的而存在;它接受一个文件名参数,并将从标准输入读取的数据写入标准输出和文件:

$ prog 2>&1 | tee file

10
而对于额外的bash 4可爱:prog |& tee file
东武

1
您也可以用命名管道替换“文件” ...
Kevin Cantu 2010年

@KevinCantu:命名管道只是一种文件类型;这是Unix,其中所有内容都是文件。您也prog |& tee /dev/tty > file可以在管道的中间使用,例如foo |& tee /dev/tty | sed 's/.*\r//' > foo.log,在终端上查看状态行进度更新,但将其从日志文件中过滤掉。或通过让您看到此时的数据,来调试您一起破解的管道。
彼得·科德斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.