make 2>&1 | tee log.txt
2>&1
0 stdin,1 stdout,2 stderr
2>&1 应该分成两个部分来看,一个是 2 > 以及另一个是 & 1,
其中 2 > 就是将标准出错重定向到某个特定的地方;&1 是指无论标准输出在哪里。
所以 2>&1 的意思就是说无论标准出错在哪里,都将标准出错重定向到标准输出中。
有时候希望将错误的信息重新定向到输出,就是将 2 的结果重定向至 1 中就有了”2>1” 这样的思路,如果按照上面的写法,系统会默认将错误的信息(STDERR)2 重定向到一个名字为 1 的文件中,而非所想的(STDOUT)中。因此需要加 & 进行区分。就有了 2>&1 这样的用法
| 管道
管道的作用是提供一个通道,将上一个程序的标准输出重定向到下一个程序作为下一个程序的标准输入。
通常使用管道的好处是一方面形式上简单,另一方面其执行效率要远高于使用临时文件。
这里使用管道的目的是将 make 程序的输出重定向到下一个程序,其最终目的是用来将输出 log 存入文件中。
tee
tee 从标准输入中读取,并将读入的内容写到标准输出以及文件中。
所以这里 tee 命令的作用是将数据读入并写到标准输出以及 log.txt 中。
之所以要将编译产生的 log 保存到 log.txt 中,其原因是你的标准输出的缓存可能是有限制的,而你编译程序产生的 log 可能会很多,这样很可能会造成 log 不完整;
其目的是当程序发生编译错误的时候,我们可以从 log.txt 中看到完整的编译 log,这样方便查找编译错误。
文档信息
- 本文作者:Lewin
- 本文链接:https://lewinz.com/2021/08/10/linux-tee/
- 版权声明:自由转载-非商用-非衍生-保持署名