0
点赞
收藏
分享

微信扫一扫

Makefile 零基础学习笔记:理解 cat .kernelrelease 2> /dev/null


前言

  • 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 零基础学习笔记:理解 cat .kernelrelease 2> /dev/null_重定向

小结

  • 深入理解Makefile 阅读与编写中的各个知识点,汇总起来,以加强学习与开发的能力
  • 了解Linux或Unix 的标准输入输出流,了解 ​​/de/null​​ 这个设备的作用


举报

相关推荐

0 条评论