命令输出redirect到文件和terminal

我试图把命令输出到文件加控制台也。 这是因为我想保留文件中的输出logging。 我正在做以下,它附加到文件,但不打印terminal输出ls

 $ls 2>&1 > /tmp/ls.txt 

是的,如果您redirect输出,它不会出现在控制台上。 使用tee

 ls 2>&1 | tee /tmp/ls.txt 

值得一提的是,2>&1意味着标准错误也会被redirect,连同标准输出一起。 所以

 someCommand | tee someFile 

只给出文件中的标准输出,而不是标准错误:标准错误只会出现在控制台中。 要获得文件中的标准错误,您可以使用

 someCommand 2>&1 | tee someFile 

(来源: 在shell中,什么是“2>&1”? )。 最后,上述两个命令都会截断文件并开始清除。 如果你使用一系列的命令,你可能想要一个接一个地输出所有错误。 在这种情况下,您可以使用-a标志来指示“tee”:

 someCommand 2>&1 | tee -a someFile 

如果有人需要附加输出而不是覆盖,可以使用“tee”命令的“-a”或“–append”选项:

 ls 2>&1 | tee -a /tmp/ls.txt ls 2>&1 | tee --append /tmp/ls.txt