将性能输出导入文件中

10 浏览
0 Comments

将性能输出导入文件中

我知道在Linux中,要将屏幕输出重定向到文件,可以使用>tee。然而,我不确定为什么部分输出仍然输出到屏幕而不写入文件。

有没有办法将所有输出都重定向到文件?

0
0 Comments

在所有的POSIX操作系统中,都有三个流:stdin、stdout和stderr。stdin是输入流,可以接受stdout或stderr的输出。stdout是主要的输出流,可以通过">"、">>"或"|"进行重定向。stderr是错误输出流,它被单独处理,以防止任何异常传递给可能会中断的命令或写入文件;通常,它被发送到某种日志中,或直接转储,即使stdout被重定向。要将这两者重定向到同一个位置,可以使用以下命令:

$ command > /some/file

编辑:感谢Zack指出上述解决方案不可移植-请改用:

$ command > file 2>&1

如果要将错误信息静音,可以使用以下命令:

$ command 2> /dev/null

似乎"&>"和"2>&!"都是做相同的事情?

"&>" (也称为">&")不是官方的POSIX shell规范的一部分,但已被添加到许多Bourne shell中作为方便扩展(它最初来自csh)。在可移植的shell脚本中(如果您不需要可移植性,为什么要编写shell脚本?),只使用"> file 2>&1"。

在sh中未实现"&>",因此在从cron文件执行的命令中要小心,crontabl使用sh来运行命令,除非您告诉它使用其他shell。

0
0 Comments

在使用命令行输出程序的性能信息时,我们经常会遇到把这些输出重定向到文件的需求。然而,有时候我们可能会遇到一些问题,比如只有标准错误输出被重定向到文件,而标准输出却没有被记录下来。这个问题的出现原因是重定向的语法不正确,我们可以通过修改重定向语句来解决这个问题。

在命令行中,可以使用2>来将标准错误输出重定向到文件。例如,我们可以使用以下语句将标准输出和标准错误输出分别重定向到不同的文件中:

foo > stdout.txt 2> stderr.txt

如果我们希望将标准输出和标准错误输出合并到同一个文件中,可以使用以下语句:

foo > allout.txt 2>&1

需要注意的是,以上语法适用于(ba)sh等shell,不同的shell可能有不同的语法。

还有一种常见的错误是,在使用重定向语句时,将2>&1放在|之前。实际上,如果我们想要同时重定向标准输出和标准错误输出到另一个命令中,应该将2>&1放在|之后。另外,如果程序同时重定向了标准输出和标准错误输出,它仍然可以通过打开/dev/tty来访问终端。

如果我们希望在原有文件内容的基础上追加输出,而不是覆盖原有内容,可以将>替换为>>

另外,如果我们希望将错误输出也记录到日志文件中,可以使用2>&12>>&1

需要注意的是,使用2>&1可以将标准错误输出重定向到指定文件,而不会丢失标准输出。这个问题可以通过自行测试来验证。

最后,如果我们希望限制标准输出和标准错误输出文件的大小,可以使用其他方法,比如使用tee命令来同时输出到文件和终端。

总结起来,当我们需要将命令行程序的性能输出重定向到文件时,需要注意重定向语法的正确使用,以及如何处理标准输出和标准错误输出。通过正确使用重定向语句,我们可以将输出记录到指定的文件中,并且可以选择是否将标准输出和标准错误输出合并到同一个文件中。

0
0 Comments

问题的出现原因是希望将命令的输出同时显示在控制台上和保存到一个文件中。解决方法是使用管道将命令的输出重定向到tee命令中,再由tee命令将输出写入指定的文件中。

具体的解决方法是在命令中使用2>&1将标准错误输出(file descriptor 2)重定向到标准输出(file descriptor 1),然后使用管道符号|将命令的输出传递给tee命令。最后,tee命令将输出同时显示在控制台上并将其写入到指定的文件中。

如果想要将输出追加到文件中而不是覆盖原有内容,可以使用tee -a file.txt命令。其中-a参数表示将内容追加到文件末尾。

总结起来,使用make 2>&1 | tee file.txt可以实现将命令的输出同时显示在控制台上和保存到一个文件中。如果想要将输出追加到文件中,可以使用tee -a file.txt命令。

0