86

我也试图将命令输出抛出到文件和控制台。这是因为我想在文件中记录输出。我正在执行以下操作,它附加到文件但不在ls终端上打印输出。

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

3 回答 3

129

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

ls 2>&1 | tee /tmp/ls.txt
于 2012-11-27T19:16:22.423 回答
44

值得一提的是,2>&1 表示标准错误也将被重定向,以及标准输出。所以

someCommand | tee someFile

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

someCommand 2>&1 | tee someFile

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

someCommand 2>&1 | tee -a someFile
于 2014-11-05T12:21:21.697 回答
18

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

ls 2>&1 | tee -a /tmp/ls.txt
ls 2>&1 | tee --append /tmp/ls.txt
于 2013-11-05T11:08:09.287 回答