shell中>/dev/null 2>&1 的作用

文章目录

在一些Shell脚本中,特别是Crontab的脚本中,经常会看到 >/dev/null 2>&1这样的写法。

其实这个很好理解。我们分两部分解释。

>/dev/null

大家知 “>”(右尖括号) 在unix/linux shell 中表示 输入到 的意思,就是把”>”左边的内容输入到”>”右边。

比如:echo text>1.txt 就把“text”这个文本输入到1.txt这个文件中。

那么 “/dev/null” 又是个什么东东呢?它代表一个空设备,即不存在的设备。也就是说,抛弃”>”左边的内容,不进行输出。

2>&1

这个其实是三个部分组成的:2, >&, 1 。我们先来搞清楚这里的2和1是什么意思。

在/usr/include/unistd.h中,你可以找到如下代码

1
#define STDIN_FILENO    0   #define STDOUT_FILENO   1   #define STDERR_FILENO   2

这是三种不同的流,其中
2代表stderr.
1代表sdtout.
&>表示把符号左边的内容以符号右边的形式输出。

因此2&>1 就是把,把stderr做为stdout输出。

现在我们结合这两个部分来看。2&>1定义了把stderr做为标准的stdout流输出,然后stdout的内容全部写入/dev/null,也就是说被舍弃掉。

结论

结论就是,无论执行的是什么命令,哪怕运行中出现了error都不会有回显。

参考文章:shell中使用>/dev/null 2>&1 丢弃信息

本文出自 TENNFY博客,转载时请注明出处及相应链接。

本文永久链接: https://www.tennfy.com/1463.html

下一篇文章:

上一篇文章:

6人参与了讨论

  1. ScotGu 说:

    简单的说就是不显示任何回显呗~
    貌似还真没怎么见过这条命令。

  2. 灰姑娘 说:

    看你今天帮助我的份儿上,给你补充几个跟本文内容相关的东西。 :grin:

    1.>/dev/null
    /dev/null是/dev/目录下的一个系统文件,内容永远都是空的
    >重定向,会将右边的文件内容清空,再把左边的内容放进去,如果需要追加输入则应该用>>
    比如,一般可用‘cat /dev/null > test.txt’这条命令清空test.txt的文件内容

    2.2>&1
    他们连在一起,表示错误输出重定向到标准输出
    如果&放到命令行的末尾,则表示以守护进程的方式启动这条命令

    如果不希望这条命令的错误输出和标准输出被丢弃,而是存入file,那么就需要写成
    ‘命令 >file 2>&1’
    若只需要标准输出直接去掉2>&1就好了,因为默认就是标准输出。

    :cool:

  3. 灰姑娘 说:

    好像挖坟了。。。
    我也不知道怎么就点进这个了,刚还以为是2015年的呢。。
    :shock: :shock:
    抱歉抱歉,博主删掉吧。。 :arrow:

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

8 + 4 = ?


您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

返回顶部