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

bin*_*inW 6 gnome-terminal output redirect

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

make > build_log.txt
Run Code Online (Sandbox Code Playgroud)

并使用 tee 命令,例如

make | tee build_log.txt
Run Code Online (Sandbox Code Playgroud)

但问题是一些输出进入文件,但其余部分一直出现在屏幕上。

我可以在运行 make 后简单地将文本从终端复制/粘贴到文件中,但这不是解决方案。

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

Lek*_*eyn 10

终端中显示的文本来自stderr流 (2)。如果你只是这样做make > build_log.txt,只有stdout(1) 流被重定向到build_log.txt文件。

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

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

make > build_log.txt 2>&1
Run Code Online (Sandbox Code Playgroud)
  • 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
Run Code Online (Sandbox Code Playgroud)

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