Linux标准输入,标准输出,标准错误输出

今天在输出define的过程中,有一中间步骤,保存编译make的产生所有warning信息的时候,对重定向的标准错误输出进行了逐个对比,最终发现自己杞人忧天

在linux下,这是三个特别的文件:

标准输入,可以找到/dev/stdin,一般bash里0来代替,代表键盘的输入

标准输出,可以找到/dev/stdout,一般bash里1来代替,代表屏幕的非错误输出

标准错误输出,可以找到/dev/stderr,一般bash里2来代替,代表屏幕的错误输出

这些东西看上去奇奇怪怪,其实综合起来应该就只有以下一些内容,标准输入就不多说了,以一个最简单的例子说说标准输出的两种情况:

假如现在要编译source code,到了make这一步,假如make的时候是通不过的,也就是会有报错,那么你命令行直接make的话,屏幕上会将正确的和报错的信息都打印出来,比如gcc的选项会打印出来,但是或者有哪一个头文件找不到会将错误信息也打印出来

1:make>make.txt

这一步将正确信息(没报错的)重定向到make.txt文件当中,而错误信息还是会打印在屏幕上,原因是直接‘>’实际上是一个标准输出重定向,也就是将没报错的信息重定向了文件make.txt,而报错了的信息(假如有)就还是在屏幕上打印出来

2:make 1>make.txt

首先这个命令大于号左右两边不能留空格,这一步实际上跟上一步是同一个意思,1代表标准输出,意思也就是将没错的信息重定向到文件make.txt,而报错的信息依旧在屏幕打印

3:make 2>make.txt

同样这里大于号左右不要留空格,这一步跟上面正好相反,2代表标准错误输出,意思就是将错误的信息(一堆error)重定向到了文件make.txt,而正确的信息就全部屏幕打印

4:make>make.txt 2>&1或者make &>make.txt

这两个命令意思一样,就是将标准输出和标准错误输出的内容全部重定向make.txt文件当中

5:make>make.txt 2>/dev/null

/dev/null大家都懂的,吸收一切的黑洞一样,从字面意思都看得出来,将本应该打印到屏幕的错误信息给弄到/dev/null了,那么屏幕就干净了,但是标准输出还是重定向到make.txt里了

6:make>make.txt 1>/dev/null

看到这个命令只能说你是闲的蛋疼,本来标准输出本意重定向到文件,结果被弄到/dev/null里了,所以make.txt就变得一片空白,而屏幕的错误信息依旧该干啥干啥

举了这些例子应该很容易理解有关重定向的命令,其它的就照葫芦画瓢,应该很容易理解,突然感觉一片清晰

发表评论