`
jiakechong
  • 浏览: 207370 次
社区版块
存档分类
最新评论

再谈shell之“>/dev/null 2>&1”

阅读更多

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

http://www.ixdba.net/article/0d/2101.html

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 这样的写法。
分享到:
评论

相关推荐

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

    在Shell脚本编程中,`>/dev/null 2>&1` 是一个常见的命令行操作,它的目的是将命令的输出(包括标准输出和标准错误)都重定向到一个特殊的地方——`/dev/null`,通常被称为“黑洞”或者“空设备文件”。这个文件的...

    详解shell中/dev/null 2&1到底是什么

    相信大家经常能在shell脚本中发现>/dev/null 2>&1这样的语句。以前的我并没有去深入地理解这段命令的作用,照搬照用,直到上周我将这段命令不小心写成了2>&1 >/dev/null,出了一点小问题之后,我才开始去了解这段...

    详解shell中>/dev/null 2>&1到底是什么

    然而,如果你误将命令写成`2>&1 >/dev/null`,那么标准错误会被重定向到标准输出,而标准输出再被重定向到`/dev/null`。这意味着所有错误信息会被丢弃,而正常的输出也会被丢弃,这可能导致你在调试脚本时错过重要的...

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

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

    详解nohup /dev/null 2>&1 含义的使用

    在 `nohup /mnt/Nand3/H2000G >/dev/null 2>&1 &` 这个例子中,`>/dev/null` 表示将标准输出(文件描述符 1)重定向到 `/dev/null`,这是一个特殊的设备文件,任何写入它的数据都会被丢弃,相当于“黑洞”。`2>&1` ...

    shell 脚本自动搭建nfs服务的方法示例

    本文介绍了shell 脚本自动搭建nfs服务的方法...ping -c 1 172.16.13.254 >/dev/null && echo **********网络ok********** #第一步:关闭selinux和防火墙 setenforce 0 >/dev/null && echo **********selinux已关闭**

    shell脚本:一键配置本地yum源仓库

    yum.sh shell脚本内容: ... mount /dev/cdrom /mnt &> /dev/null cd /mnt/Packages/ if [ $? -eq 0 ] then echo 已将系统安装光盘挂载至/mnt目录下 cp -rf /etc/yum.repos.d/* /home/ rm -rf /etc/yum.repos

    人性化解析shell脚本,保证快速入门sh,bash,shell入门.pdf

    "人性化解析shell脚本,快速入门sh、... "1") happy_2 2>/dev/null ;; "2") happy_3 2>/dev/null ;; *) exit 0 ;; esac done ``` 通过这些示例,读者可以快速入门Shell脚本,并了解基本的Shell脚本语法和使用方法。

    [面试题答案]定时任务题目1

    例如:`05 01 * * 1 sh /data/nginx_log/ftp_nginxlog.sh >/dev/null 2>&1`,这条命令将在每星期一的一点五分执行。 2.1 Cron 命令的基本格式 Cron 命令的基本格式为:`* * * * * command >/dev/null 2>&1`,其中第...

    Linux 命令 shell 重定向 >

    - `2>&1` 表示将错误输出(2)重定向到标准输出(1),这样错误信息也会被输出到屏幕或指定的文件。 - `&> filename` 是一个简化的形式,它同时将标准输出和错误输出都重定向到`filename`。 4. **输出打印不显示*...

    高级Bash脚本编程指南.docx

    如果想同时忽略标准输出和错误输出,可以使用`2>/dev/null >/dev/null`。 此外,`/dev/null`还可以用来清空日志文件,如示例中的`/var/log/wtmp`和`/var/log/messages`。`/dev/null`的另一个应用是阻止程序产生的...

    hella-verbose:使你的 shell 脚本变得冗长

    if hash espeak 2> /dev/null ; then echo " $@ " | espeak -s 120 2> /dev/null elif hash /usr/bin/say 2> /dev/null ; then /usr/bin/say " $@ " 2> /dev/null fi } 例子 #! /bin/sh say () { echo " $@ ...

    shell脚本定时检测服务健康指标

    检测服务监控脚本,可设置定时执行及...*/5 * * * * /bin/bash /home/mysh/service-health-check.sh >/dev/null 2>&1 开机启动: vim /etc/rc.local /bin/bash /home/mysh/service-health-check.sh >/dev/null 2>&1 &

    从数据库中取变量传递给shell,生成环境变量

    #Sqlplus user/pwd@ip @myshellpara.sql $> /dev/null Sqlplus user/pwd@ip @myshellpara.sql $> /dev/null chmod 777 myshellvar_export.sh #注意.这里的技巧,变相执行 myshellvar_export.sh,生成linux 系统的环境...

    一个简单的防CC攻击Shell脚本分享

    /bin/shcd /var/log/httpd/cat access_log|awk ‘{print $1}’|sort|uniq -c|sort -n -r|head -n 20 > acp /dev/null access_logcp /dev/null error_logcp /dev/null limit.shcp /dev/null c#awk ‘{print $2}’ a|...

    Bash中文件描述符的详细介绍

    3. 隐藏命令的错误输出:`command 2>/dev/null`,这会将错误信息丢弃,不显示在终端。 掌握文件描述符的使用,对于编写复杂的Bash脚本和高效管理Linux系统至关重要。通过熟练运用文件描述符,你可以更灵活地控制...

    02-SHELL编程之流程控制和循环语句

    ping -c1 $IP &>/dev/null if [ $? -eq 0 ];then echo "当前主机和远程主机$IP是互通的。" else echo "当前主机和远程主机$IP是不通的。" fi 或者 #!/bin/bash # Name:ping.sh # Path:/shell02/ # Usage:/shell...

    linux-shell编程

    /bin/tar -cf /backup/$1.$DATE.tar $1 > /dev/null 2>> /backup/$1.bak.log /bin/gzip /backup/$1.$DATE.tar if [ $? -eq 0 ] then echo "$1 $DATE backup successfully" >> /backup/$1.bak.log else echo "ERROR...

Global site tag (gtag.js) - Google Analytics