我正在使用 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
流 ( )&1
build_log.txt
- 该
顺序很重要,您不能像这样切换重定向操作符make 2>&1 > build_log.txt
。
替代命令:
make 2>&1 | tee build_log.txt > /dev/null
/dev/null
需要重定向到 来隐藏输出,tee
将其输入写入build_log.txt
并将其输出。