shell中的“>/dev/null 2>&1”

今天在自己的一个技术群中又被问道了这么一个问题,于是又通俗的解释了一下,做个记录,大家看看解 释是否清楚!

shell中可能经常能看到:>/dev/null 2>&1

命令的结果可以通过% >的形式来定义输出

分解这个组合:“>/dev/null 2>&1” 为五部分。

1:> 代表重定向到哪里,例如:echo "123" > /home/123.txt

2:/dev/null 代表空设备文件

3:2> 表示stderr标准错误

4:& 表示等同于的意思,2>&1,表示2的输出重定向等同于 1

5:1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于 "1>/dev/null"

因此,>/dev/null 2>&1也可以写成“1> /dev/null 2> &1”

那么本文标题的语句执行过程为:

1>/dev/null :首先表示标准输出重定向到 空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。

2>&1 :接着,标准错 误输出重定向 到 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空 设备文件。

说清楚了吗,大家理解下吧!

顺便对比述说下这么用的好处!

最常用的方 式有:

command > file 2>file  与command > file 2>&1

它们 有什么 不同的地方吗?

首先command > file 2>file 的意思是将命令所产生的标准输出信息,和错误的 输出信息送到file 中.command  > file 2>file 这样的写法,stdout和stderr都直接送到file中, file会被打开两次,这样stdout和stderr会互相覆盖,这样写相当使用了FD1和FD2两个同时去抢占file 的管道 。

而command >file 2>&1 这条命令就将stdout直接送向file, stderr 继承了FD1管道后,再被 送往file,此时,file 只被打开了一次,也只使用了一个管道FD1,它包括了stdout和stderr的内容。

从IO效 率上,前一条命令的效率要比后面一条的命令效率要低,所以在编写shell脚本的时候,较多的时候我们会 command > file 2>&1 这样的写法。

本文出自 “技术成就梦想” 博客,请务必保留此出 处http://ixdba.blog.51cto.com/2895551/526442

时间: 2024-11-08 20:25:24

shell中的“>/dev/null 2>&1”的相关文章

shell中1小于/dev/null 2大于&1的含义_linux shell

shell中可能经常能看到:>/dev/null 2>&1 命令的结果可以通过%>的形式来定义输出 /dev/null 代表空设备文件 > 代表重定向到哪里,例如:echo "123" > /home/123.txt 1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null" 2 表示stderr标准错误 & 表示等同于的意思,2>&a

Shell脚本———— /dev/null 2>&1详解

1.可以将/dev/null看作"黑洞". 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到. 然而, /dev/null对命令行和脚本都非常的有用. 用处: 禁止标准输出.    1 cat $filename >/dev/null   # 文件内容丢失,而不会输出到标准输出. 禁止标准错误.    2>/dev/null 这样错误信息[标准错误]就被丢到太平洋去了.  2.1>/dev/null 2>&

重定向-grep "^MLEVEL"$level > & /dev/null 中&是什么意思?

问题描述 grep "^MLEVEL"$level > & /dev/null 中&是什么意思? grep ""^MLEVEL""$level > & /dev/null 中&是什么意思? 不是重定向到/dev/null里吗?为什么要加&符号? 去掉可以吗? 解决方案 &j # 默认的 重定向文件描述符1(stdout)到j. # 所有传递到stdout的输出都送到j中去. 解决方案二:

shell脚本-python ${OOB} &> /dev/null

问题描述 python ${OOB} &> /dev/null 请问各位大牛这句shell脚本是什么意思啊,感激不尽啊!!! 解决方案 我只知道>/dev/null是把前面的内容重定向这个伪设备当中,通俗地说是把前面的结果扔到这个垃圾堆里去 解决方案二: 把执行结果丢到null设备

Shell中判断字符串是否为数字的6种方法分享

  本篇文章主要介绍了"shell 判断字符串是否为数字",主要涉及到shell 判断字符串是否为数字方面的内容,对于shell 判断字符串是否为数字感兴趣的同学可以参考一下. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 #!/bin/bash   ## 方法

Linux shell中的I/O重定向相关(转)

1. 基本概念(这是理解后面的知识的前提,请务必理解)  a. I/O重定向通常与 FD有关,shell的FD通常为10个,即 0-9: b. 常用FD有3个,为0(stdin,标准输入).1(stdout,标准输出).2(stderr,标准错误输出),默认与keyboard.monitor.monitor有关: c. 用 < 来改变读进的数据信道(stdin),使之从指定的档案读进: d. 用 > 来改变送出的数据信道(stdout, stderr),使之输出到指定的档案: e. 0 是 &

/dev/null解决办法

系统文件/dev/null丢失怎么办呀 重启时出现如下问题 /etc/rc.d/rc.sysinit:line 88: /dev/null: Read-only file system /etc/rc.d/rc.sysinit:line 99: /dev/null: Read-only file system configuring kernel parameters: dup2: Bad file descriptor [failed] Setting clock (localtime):Au

Linux集群和自动化维2.3 Shell中的控制流结构

2.3 Shell中的控制流结构 Shell中的控制流结构也比较清晰,如下所示: if ...then... else...fi语句 case语句 for循环 until循环 while循环 break控制 continue控制 工作中用得最多的就是if语句.for循环.while循环及case语句,大家可以以这几个为重点对象来学习. if语句语法如下: if 条件1 then   命令1 else   命令2 fi if语句的进阶用法: if 条件1 then     命令1       el

linux shell 中 2>&amp;amp;1的含义_linux shell

linux shell 中"2>&1"的含义 脚本: nohup /mnt/Nand3/H2000G  >/dev/null  2>&1  & 对于& 1 更准确的说应该是文件描述符 1,而1 一般代表的就是STDOUT_FILENO,实际上这个操作就是一个dup2(2)调用.他标准输出到all_result ,然后复制标准输出到文件描述符2(STDERR_FILENO),其后果就是文件描述符1和2指向同一个文件表项,也可以说错误的输出