• linux command>file 2>&1 & 命令详解


    command>file 2>&1 &

    命令的最后一个&表示把该命令以后台的job的形式运行

    一个命令的执行伴随着三种输入输出

    标准输入(stdin):默认指向键盘的输入,可以通过标准输入重定向<,让标准输入指向文件输入

    标准输出(stdout) :指命令产生的正常的输出,如echo aaa,标准输出默认指向终端显示器,可以通过输出重定向>,让标准输出重定向到文件

    标准错误输出(stderr):指命令产生的错误信息的输出,如执行了不存在的命令t,标准错误输出也默认指向终端显示器,同样可以通过输出重定向>,让标准错误输出重定向到文件

    所谓的输出重定向到文件,是指把默认输出到终端显示器的信息写入到指定文件

    标准输入,标准输出,标准错误输出的文件描述符分别时0,1,2。

    上面命令中

    command 为要执行的命令

    > 表示输出重定向

    file 表示要重定向的文件名

    2和1 分别指标准错误输出和标准输出,

    &1表示标准输出的引用,所以2>&1是指把标准错误输出重定向到标准输出的引用,即也重定向到file

    例子

    脚本

    #!/bin/sh
    
    t       //t命令不存在,会产生标准错误输出
    date     //会产生标准输出

    执行脚本:未重定向的情况下标准错误输出和标准输出都显示在终端显示器

    [vagrant@vmp2-local-dva01 ~]$ sh /var/www/pyxis2/system/fortest/test1.sh
    /var/www/pyxis2/system/fortest/test1.sh: line 3: t: コマンドが見つかりません     //标准错误输出显示到显示器
    2019年  1月 18日 金曜日 18:43:37 JST                                           //标准输出显示到显示器
    [vagrant@vmp2-local-dva01 ~]$

    标准输出重定向到testlog文件,标准错误输出不重定向

    [vagrant@vmp2-local-dva01 ~]$ sh /var/www/pyxis2/system/fortest/test1.sh > testlog
    /var/www/pyxis2/system/fortest/test1.sh: line 3: t: コマンドが見つかりません //标准错误输出未重定向,错误信息默认显示到显示器 [vagrant@vmp2-local-dva01 ~]$ cat testlog //标准输出重定向到testlog文件,所以标准输出写入到testlog文件,而没有显示到显示器 2019年 1月 18日 金曜日 18:50:22 JST [vagrant@vmp2-local-dva01 ~]$

    command >file   就相当于  command 1>file

    标准输出不重定向,标准错误输出重定向到testlog

    [vagrant@vmp2-local-dva01 ~]$ sh /var/www/pyxis2/system/fortest/test1.sh 2> testlog
    2019年  1月 18日 金曜日 18:58:20 JST        //标准输出未重定向,标准输出默认输出到显示器
    [vagrant@vmp2-local-dva01 ~]$ cat testlog   //标准错误输出重定向到testlog文件,所以错误信息写入到testlog文件,而没有在显示器显示
    /var/www/pyxis2/system/fortest/test1.sh: line 3: t: コマンドが見つかりません
    [vagrant@vmp2-local-dva01 ~]$

    标准输出重定向到testlog1,标准错误输出重定向到testlog2

    [vagrant@vmp2-local-dva01 ~]$ sh /var/www/pyxis2/system/fortest/test1.sh >testlog1 2>testlog2
    [vagrant@vmp2-local-dva01 ~]$ cat testlog1
    2019年  1月 18日 金曜日 19:04:32 JST
    [vagrant@vmp2-local-dva01 ~]$ cat testlog2
    /var/www/pyxis2/system/fortest/test1.sh: line 3: t: コマンドが見つかりません
    [vagrant@vmp2-local-dva01 ~]$

    标准输出重定向到文件testlog,标准错误输出重定向到标准输出的引用

    [vagrant@vmp2-local-dva01 ~]$ sh /var/www/pyxis2/system/fortest/test1.sh >testlog 2>&1
    [vagrant@vmp2-local-dva01 ~]$ cat testlog
    /var/www/pyxis2/system/fortest/test1.sh: line 3: t: コマンドが見つかりません
    2019年  1月 18日 金曜日 19:06:45 JST
    [vagrant@vmp2-local-dva01 ~]$

    标准错误输出重定向到文件testlog,标准输出和重定向到标准错误输出的引用

    [vagrant@vmp2-local-dva01 ~]$ sh /var/www/pyxis2/system/fortest/test1.sh 2>testlog 1>&2
    [vagrant@vmp2-local-dva01 ~]$ cat testlog
    /var/www/pyxis2/system/fortest/test1.sh: line 3: t: コマンドが見つかりません
    2019年  1月 18日 金曜日 19:08:29 JST
    [vagrant@vmp2-local-dva01 ~]$

    标准输出重定向到testlog文件,标准错误输出也重定向到testlog文件

    [vagrant@vmp2-local-dva01 ~]$ sh /var/www/pyxis2/system/fortest/test1.sh 1>testlog 2>testlog
    [vagrant@vmp2-local-dva01 ~]$ cat testlog
    2019年  1月 18日 金曜日 19:10:17 JST
    ne 3: t: コマンドが見つかりません            //输出不完全
    [vagrant@vmp2-local-dva01 ~]$

    command>a 2>a 与 command>a 2>&1的区别

    对于command>a 2>&1这条命令,等价于command 1>a 2>&1

    可以理解为执行command产生的标准输入重定向到文件a中,标准错误也重定向到文件a中。

    那么是否就说command 1>a 2>&1等价于command 1>a 2>a呢。

    其实不是,command 1>a 2>&1与command 1>a 2>a还是有区别的,区别就在于前者只打开一次文件a,后者会打开文件两次,并导致stdout被stderr覆盖,可能导致某些输出错误。

    &1的含义就可以理解为用标准输出的引用,引用的就是重定向标准输出产生打开的a。从IO效率上来讲,command 1>a 2>&1比command 1>a 2>a的效率更高。

  • 相关阅读:
    阿里妈妈又做了新工具,帮你把 Vue2 代码改成 Vue3 的
    gulp安装出错
    js操作select
    linux基本命令说明参数
    Linux基础——vim编辑器的使用
    常见报错——Uncaught TypeError: document.getElementsByClassName(...).addEventListener is not a function
    IE浏览器hack方法总结之条件注释判断
    浏览器兼容
    安好
    jQuery调整表列(左右拉动调整列宽)插件__colResizable,动态列如何使用
  • 原文地址:https://www.cnblogs.com/gaoBlog/p/10289179.html
Copyright © 2020-2023  润新知