zoukankan      html  css  js  c++  java
  • linux中Shell标准输出错误 >/dev/null 2>&1 分析【转】

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

        eg:sudo kill -9 `ps -elf |grep -v grep|grep $1|awk '{print $4}'` 1>/dev/null 2>/dev/null

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

    /dev/null 代表空设备文件

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

    那么本文标题的语句:

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

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

    2>&1写在后面的原因

        格式:command > file 2>&1   ==  command  1> file 2>&1

    首先是command > file将标准输出重定向到file中, 2>&1 是标准错误拷贝了标准输出,也就是同样被重定向到file中,最终结果就是标准输出和错误都被重定向到file中。

    如果改成: command 2>&1 >file

    2>&1 标准错误拷贝了标准输出的行为,但此时标准输出还是输出到终端。当 >file 后,标准输出才被重定向到file,但标准错误仍然保留了先前的设置,即保持输出到终端。

    脚本只使用标准输入、标准输出和标准错误

        Shell会自动为我们打开和关闭0、1、2这三个文件描述符,我们不需要显式地打开或关闭它们。标准输入是命令的输入,默认指向键盘;标准输出是命令的输出,默认指向屏幕;标准错误是命令错误信息的输出,默认指向屏幕。

        如果没有显式地进行重定向,命令通过文件描述符0从屏幕读取输入,通过文件描述符1和2将输出和错误信息输出到屏幕。但如果我们想从其他文件(再次强调,I/O设备在Unix/Linux中也是文件)读取输入或产生输出,就需要对0、1、2使用重定向了。其语法如下:


    command < filename                         把标准输入重定向到filename文件中
    command 0< filename                       把标准输入重定向到filename文件中

    command > filename                         把标准输出重定向到filename文件中(覆盖)
    command 1> fielname                       把标准输出重定向到filename文件中(覆盖)

    command >> filename                       把标准输出重定向到filename文件中(追加)
    command 1>> filename                     把标准输出重定向到filename文件中(追加)

    command 2> filename                       把标准错误重定向到filename文件中(覆盖)
    command 2>> filename                     把标准输出重定向到filename文件中(追加)

    command > filename 2>&1               把标准输出和标准错误一起重定向到filename文件中(覆盖)
    command >> filename 2>&1             把标准输出和标准错误一起重定向到filename文件中(追加)

    command < filename >filename2        把标准输入重定向到filename文件中,把标准输出重定向

                                                            到filename2文件中
    command 0< filename 1> filename2   把标准输入重定向到filename文件中,把标准输出重定向

                                                            到filename2文件中

    重定向的使用有如下规律:

    1)标准输入0、输出1、错误2需要分别重定向,一个重定向只能改变它们中的一个。
    2)标准输入0和标准输出1可以省略。(当其出现重定向符号左侧时)
    3)文件描述符在重定向符号左侧时直接写即可,在右侧时前面加&。
    4)文件描述符与重定向符号之间不能有空格!

  • 相关阅读:
    Java程序:从命令行接收多个数字,求和并输出结果
    大道至简读后感
    大道至简第一章读后感Java伪代码
    Creating a SharePoint BCS .NET Connectivity Assembly to Crawl RSS Data in Visual Studio 2010
    声明式验证超时问题
    Error message when you try to modify or to delete an alternate access mapping in Windows SharePoint Services 3.0: "An update conflict has occurred, and you must re-try this action"
    Upgrading or Redeploying SharePoint 2010 Workflows
    Upgrade custom workflow in SharePoint
    SharePoint 2013中Office Web Apps的一次排错
    How to upgrade workflow assembly in MOSS 2007
  • 原文地址:https://www.cnblogs.com/paul8339/p/6518160.html
Copyright © 2011-2022 走看看