前言
- Makefile 的编写过程,遇到很多的知识点,如 Linux shell的很多知识点,这里做个学习笔记
-
2> /dev/null
是什么意思呢?
示例
- Makefile 中遇到如下的代码:
# Read KERNELRELEASE from .kernelrelease (if it exists)
KERNELRELEASE = $(shell cat .kernelrelease 2> /dev/null)
KERNELVERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
- 这里执行了shell 脚本,
2> /dev/null
意味着什么呢? - 首先:
.kernelrelease
是一个文件,里面就是一句话:字符串:版本号,可以直接执行 - 这里使用:Cygwin64 Terminal 运行,发现
2> /dev/null
可有可无
$ cat .kernelrelease
1.0.01
$ cat .kernelrelease 2> /dev/null
1.0.01
2>
- 这里是个重定向的意思, 2 代表Linux 标准输入输入中的:stderr
- Unix 或 Linux 中:
- 0 代表标准输入流,也就是:stdin
- 1代表标准输出流,也就是:stdout
- 2代表标准错误流,也就是:stderr
/dev/null
- 这是一个字符设备,只是输出到这个字符设备后,就像是【黑洞】一样,没有了,就是输出到这个
/dev/null
设备后,信息就没有了。
2> /dev/null
- 标准错误流(stderr)重定向到设备/dev/null上,忽略可能产生的错误信息
理解
-
$(shell cat .kernelrelease 2> /dev/null)
就是把 .kernelrelease
信息读取出来,当然,若果这个.kernelrelease
文件不存在,忽略掉错误输出
测试验证
/* .kernelrelease 文件存在时 */
$ cat .kernelrelease
1.0.01
/* 删除 .kernelrelease 文件 */
$ rm .kernelrelease
/* .kernelrelease 不存在,报错误信息: */
$ cat .kernelrelease
cat: .kernelrelease: No such file or directory
/* .kernelrelease 不存在,但是重定向标准错误 到 /dev/null后,无错误信息产生 */
$ cat .kernelrelease 2> /dev/null
- 经过测试,验证了
2> /dev/null
的作用就是把错误信息【吞进去】,运行中产生的错误信息【消失了】 - 也就是【忽略报错信息】
小结
- 深入理解Makefile 阅读与编写中的各个知识点,汇总起来,以加强学习与开发的能力
- 了解Linux或Unix 的标准输入输出流,了解
/de/null
这个设备的作用