如何将脚本/程序的输出放入文件中?

如何将脚本/程序的输出放入文件中?

我正在使用 make 编译一个程序,并希望将 make 的输出写入文件。我尝试使用 > 运算符,例如

make > build_log.txt

并使用 tee 命令

make | tee build_log.txt

但问题是,部分输出进入了文件,但其余部分仍继续出现在屏幕上。

运行 make 后,我只能将文本从终端复制/粘贴到文件中,但这不是解决方案。

所以我的问题是如何保存 ie 重定向全部输出到文件,以便它仅进入文件而不出现在屏幕上。

答案1

终端中显示的文本来自stderr流 (2)。如果您只执行make > build_log.txt,则只有stdout(1) 流会重定向到文件build_log.txt

  • stdout是标准输出流,文件描述符编号为 1。这是 shell 中重定向的默认流。
  • stderr是标准错误流,文件描述符编号为 2

要将stderr流也重定向到该build_log.txt文件,请使用:

make > build_log.txt 2>&1
  • make被执行并且
    • stdout流被重定向(>)至build_log.txt
    • stderr流被重定向 ( 2>) 到之前重定向到的stdout流 ( )&1build_log.txt

顺序很重要,您不能像这样切换重定向操作符make 2>&1 > build_log.txt

替代命令:

make 2>&1 | tee build_log.txt > /dev/null

/dev/null需要重定向到 来隐藏输出,tee将其输入写入build_log.txt并将其输出。

相关内容