0.参考
make日志同时输出到控制台和文件及2」&1
将Linux下编译的warning警告信息输出到文件中[整理笔记]
Linux 二零——1 bash shell——1.7管道和重定向
1.Linux中的I/O流
shell 使用 3 种标准「I/O 流」,每种流与一种文件描述符相关联:
- stdin 是标准输入流,向命令提供输入。文件描述符为 0。
- stdout 是标准输出流,显示来自命令的输出。文件描述符为 1。
- stderr 是标准错误流,显示来自命令的错误输出。文件描述符为 2。
Linux中,脚本语言环境中,即你用make xxx即其他一些普通 linux 命令,比如ls,find等,不同的数字,代表不同的含义: 数字 含义 标准叫法 0 标准输入 stdin = standard input 1 标准输出 stdout = standard output 2 标准错误输出 stderr = standard error
系统默认的stdin,stdout,stderr 都是屏幕,所以当你执行命令,比如make后,所输出的信息都是可以在屏幕上看到的 。
所以想要将对应信息输出到某个文件中,就用对应的数字加上重定向符号’>’,实现将这些信息重新定向到对应的文件中。
2.make输出的I/O流的重定向
2.1.make > out.txt 或make 1> out.txt 把正常输出重定向到文件
make > out.txt 没有显示的指明要把1或者2哪个的输出流定向到文件中,那么默认的就是把stdout,即标准输出重定向到文件中,make > out.txt 和make 1> out.txt 是等价的。此时由于没有更改stderr的输出,因此屏幕上仍然可以看到make的error(包括warning)。
如下图所示,右侧是命令行只显示了一些warning,左侧是out.txt文件只显示了编译过程中的正常输出。显然这种方式不实用。
2.2.make 2> out.txt 把错误输出重定向到文件
这种方式相比上面的方式更加实用一点,就是把error(包括wanring)重定向到文件中,这样在平面上只剩下正常输出,如下图所示。
但是这种方式存在的问题是如果编译出现错误,不能明显的在屏幕上看到,还需要打开文件进行查看。
2.3.make 2>&1 | tee out.txt 把所有输出都定向到文件同时保留屏幕显示
2>&1 ,2 和 1 分别是 stderr 和 stdout,即将 stderr 重定向到 stdout。如果写成 2>1 则表示 stderr 重定向到 1 这个文件,所以有了 2>&1 这样特别的语法。
这样的结果可以在保留屏幕输出的所有内容的同时,把屏幕输出内容保存到文件中,如下图所示。但是存在的一个缺点就是由于把stderr重定向到了stdout中,导致正常的stdout输出没有了颜色,暂时不知道如何解决。
注意:不可以用make | tee out.txt ,因为make后面什么重定向都不加的话,默认是把1即stdout输出到文件中,而不包含stderr,如下图所示。
|