如何将输出重定向到文件和标准输出

在bash中,调用foo将在stdout上显示该命令的全部输出。 html

调用foo > output会将该命令的全部输出重定向到指定的文件(在本例中为“ output”)。 node

有没有一种方法能够将输出重定向到文件在stdout上显示? bash


#1楼

您能够主要使用Zoredache 解决方案 ,可是若是您不想覆盖输出文件,则应使用-a选项编写tee,以下所示: app

ls -lR / | tee -a output.file

#2楼

对我有用的另外一种方法是 spa

<command> |& tee  <outputFile>

gnu bash手册中所示 日志

例: code

ls |& tee files.txt

若是使用'|&',则command1的标准错误 (除了其标准输出 )还经过管道链接到command2的标准输入; 它是2>&1 |的简写 将标准错误隐式重定向到标准输出是在命令指定的任何重定向以后执行的。 htm

有关更多信息,请参考重定向 ip


#3楼

补充一下... get

软件包解缓冲在fedora和redhat UNIX发行版中对某些软件包有支持问题。

排除烦恼

如下对我有用

bash myscript.sh 2>&1 | tee output.log

谢谢ScDF马修,您的输入为我节省了不少时间。


#4楼

奖励答案,由于此用例将我带到了这里:

若是您须要以其余用户身份执行此操做

echo "some output" | sudo -u some_user tee /some/path/some_file

请注意,回声会发生在你和文件写入会发生的“some_user”究竟会不会工做,若是你要运行回声为“some_user”,并与输出重定向>>“SOME_FILE”,由于文件重定向会发生和你同样

提示:tee还支持带有-a标志的append,若是您须要以其余用户的身份替换文件中的一行,则能够以所需用户的身份执行sed。


#5楼

您想要的命令名为tee

foo | tee output.file

例如,若是您只关心标准输出:

ls -a | tee output.file

若是要包括stderr,请执行如下操做:

program [arguments...] 2>&1 | tee outfile

2>&1将通道2(stderr /标准错误)重定向到通道1(stdout /标准输出),以便将二者都写为stdout。 从tee命令开始,它也被定向到给定的输出文件。

此外,若是要追加到日志文件,请使用tee -a做为:

program [arguments...] 2>&1 | tee -a outfile