现在的位置: 首页 > 综合 > 正文

make 2>&1 | tee log.txt学习

2014年05月24日 ⁄ 综合 ⁄ 共 853字 ⁄ 字号 评论关闭

前言
接触过linux的人,或多或少都会了解一点make 2>&1 | tee log.txt这个命令。

1. make是什么?
make是linux下一个非常强大的命令,简单点就是你要编译你的源代码就得靠他了。

2. 2>&1是什么意思?
2>&1应该分成两个部分来看,一个是2>以及另一个是&1,
其中2>就是将标准出错重定向到某个特定的地方;&1是指无论标准输出在哪里。
所以2>&1的意思就是说无论标准出错在哪里(哪怕是没有?),都将标准出错重定向到标准输出中。

3. 这里为什么还用到了管道?
管道的作用是提供一个通道,将上一个程序的标准输出重定向到下一个程序作为下一个程序的标准输入。
通常使用管道的好处是一方面形式上简单,另一方面其执行效率要远高于使用临时文件。
这里使用管道的目的是将make程序的输出重定向到下一个程序,其最终目的是用来将输出log存入文件中。

4. tee是用来干什么的?
tee从标准输入中读取,并将读入的内容写到标准输出以及文件中。
所以这里tee命令的作用是将数据读入并写到标准输出以及log.txt中。
怪不得可以看到标准输出会一直输出log,同时log也会保存到log.txt中呢,原来都是tee的功效。
为了验证,做了一个实验,make 2>&1 | tee log.txt > /dev/null,可以看到标准输出已经不会再输出log了。
之所以要将编译产生的log保存到log.txt中,
其原因是你的标准输出的缓存可能是有限制的,而你编译程序产生的log可能会很多,
这样很可能会造成log不完整;
其目的是当程序发生编译错误的时候,我们可以从log.txt中看到完整的编译log,
这样方便查找编译错误。

5. 关于I/O重定向的疑问?
既然管道可以用来进行I/O重定向,那应该是先有管道左边进程的输出才会有管道右边进程的输入吧?
可是我执行make 2>&1 | id这条命令时,会立即显示出id这条命令的结果,好像make并没有执行一样,
这该如何解释?
有知道的朋友指点一下哦,本人也会持续的去了解相关内容,如有结果到时再更新出来。

抱歉!评论已关闭.