首页 理论教育 实用LinuxShell编程:标准错误输出更高效

实用LinuxShell编程:标准错误输出更高效

时间:2023-11-18 理论教育 版权反馈
【摘要】:例如,查看一个不存在的文件,会遇到No such file or directory的提示:如果不希望看到错误提示,可以将标准错误输出重定向到“黑洞”:某些时候,有的命令或者脚本的正常输出信息也不需要关心,可以将其重定向到“黑洞”,即,标准输出也可以重定向到“黑洞”。

实用LinuxShell编程:标准错误输出更高效

执行一个shell命令还会自动打开标准错误输出文件(stderr),它默认也是对应终端屏幕,对应文件描述符2。下面用ls命令查看一个不存在的文件的信息:

No such file or directory的信息输出在屏幕上,但这不再是标准输出,而是标准错误输出。如何理解标准错误输出与标准输出的区别呢?下面试图将信息No such file or directory重定向到文件lst_bak.txt里面,结果发现,No such file or directory仍然显示在屏幕上,而文件lst_bak.txt是个空文件:

需要使用2>对标准错误输出进行重定向,使用2>>对标准错误输出进行追加重定向,注意,2与>之间不能有空格。把前面例子中的>变为2>,No such file or directory不再显示在屏幕上,而是保存到了文件lst_bak.txt里面:

一条命令的结果,常常既有正常输出信息,又有错误信息:

可以将这两类信息分别重定向到不同的文件(下面命令中的1>可以简写为>),标准输出重定向到lst.txt,标准错误输出重定向到lst_bak.txt:

也可以重定向到同一个文件。在下面的命令中,>lst.txt的作用是将标准输出重定向到文件lst.txt,2>&1的作用是将标准错误输出重定向到标准输出(可以理解为:标准错误输出“跟随着”标准输出,标准输出重定向到哪里,标准错误输出就重定向到哪里)。那么下面命令的正常输出信息和错误信息都重定向到了文件lst.txt中:

此外,使用&>或>&,也可以将标准错误输出和标准输出重定向到同一个文件:

标准错误输出与标准输出,都是输出,默认都显示在屏幕上,为什么要把它们分开呢?因为日常工作中的Linux服务器,经常有很多程序在运转着,还有维护人员定时地查看日志,将正常信息和异常信息分开,有利于及时发现问题、定位问题。(www.xing528.com)

某些情况下,一个脚本的运行,只需要知道其正常输出信息,错误信息可以忽略。此时可以将错误信息重定向到设备文件/dev/null。/dev/null是空设备,是Linux的一个特殊文件,它是“垃圾桶”“无底洞”,或者叫它“黑洞”,任何输出重定向到它的话,就消失得一干二净。

例如,查看一个不存在的文件,会遇到No such file or directory的提示:

如果不希望看到错误提示,可以将标准错误输出重定向到“黑洞”:

某些时候,有的命令或者脚本的正常输出信息也不需要关心,可以将其重定向到“黑洞”,即,标准输出也可以重定向到“黑洞”。

运行下面的命令,则屏幕上没有输出:

Bash4版本新增了两个重定向符号:&>>和|&。command&>>file等价于command>>file2>&1,意思是,命令command的标准错误输出和标准输出一起追加重定向到文件file。在下一小节介绍|&的使用。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈