zoukankan      html  css  js  c++  java
  • shell脚本中常见的标准输入、标准输出、标准错误重定向详解

     

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

    2、1>/dev/null 2>&1的含义 

    > 代表重定向到哪里,例如:echo "123" > /home/123.txt 
    1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null" 
    2 表示stderr标准错误 
    & 表示等同于的意思,2>&1,表示2的输出重定向等同于1 

    那么本文标题的语句: 
    1>/dev/null 首先表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,说白了就是不显示任何信息。 
    2>&1 接着,标准错误输出重定向等同于 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。 

    3、/dev/zero文件代表一个永远输出 0的设备文件,使用它作输入可以得到全为空的文件。因此可用来创建新文件和以覆盖的方式清除旧文件。 

    下面使用dd命令将从zero设备中创建一个10K大小(bs决定每次读写1024字节,count定义读写次数为10次),但内容全为0的文件。 
    dd if=/dev/zero of=file count=10 bs=1024

    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 这样的写法。

    我想,抬头暖阳春草,你给我简单拥抱 我想,踩碎了迷茫走过时光,睁开眼你就会听到
  • 相关阅读:
    494 Target Sum 目标和
    493 Reverse Pairs 翻转对
    492 Construct the Rectangle 构建矩形
    491 Increasing Subsequences 递增子序列
    488 Zuma Game 祖玛游戏
    486 Predict the Winner 预测赢家
    485 Max Consecutive Ones 最大连续1的个数
    483 Smallest Good Base
    Django Form组件
    Django Auth组件
  • 原文地址:https://www.cnblogs.com/selectztl/p/9477988.html
Copyright © 2011-2022 走看看