当前位置:   article > 正文

Linux系列8:command>file 2>&1 & 命令详解

>&1 &

1 符号基本含义

  • /dev/null 表示空设备文件,将输出重定向到这个位置即表示丢弃
  • 0 表示stdin标准输入
  • 1 表示stdout标准输出
  • 2 表示stderr标准错误
  • &:命令最后的&表示将命令放到后台执行

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

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

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

2 示例详解

首选写一个shell脚本:

#!/bin/sh

t       //t命令不存在,会产生标准错误输出
date     //会产生标准输出
  • 1
  • 2
  • 3
  • 4
  1. 执行脚本:未重定向的情况下标准错误输出和标准输出都显示在终端显示器
[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 ~]$
  • 1
  • 2
  • 3
  • 4
  1. 标准输出重定向到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 ~]$
  • 1
  • 2
  • 3
  • 4
  • 5

command >file 就相当于 command 1>file
3. 标准输出不重定向,标准错误输出重定向到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 ~]$
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 标准输出重定向到testlog1,标准错误输出重定向到testlog2
[vagrant@vmp2-local-dva01 ~]$ sh /var/www/pyxis2/system/fortest/test1.sh >testlog1 2>testlog2
# 等价于:sh /var/www/pyxis2/system/fortest/test1.sh 1>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 ~]$
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  1. 标准输出重定向到文件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 ~]$
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 标准错误输出重定向到文件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 ~]$
  • 1
  • 2
  • 3
  • 4
  • 5
  1. 标准输出重定向到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 ~]$
  • 1
  • 2
  • 3
  • 4
  • 5

3 command>file 2>file 与 command>file 2>&1的区别

  1. command>file 2>&1这条命令,等价于command 1>file 2>&1,可以理解为执行command产生的标准输入重定向到文件file中,标准错误也重定向到文件file中。
  2. 那么是否就说command 1>a 2>&1等价于command 1>a 2>a呢。
  3. 其实不是,command 1>file 2>&1与command 1>file 2>file还是有区别的,区别就在于前者只打开一次文件file,后者会打开文件两次,并导致stdout被stderr覆盖,可能导致某些输出错误。 ==&1的含义就可以理解为用标准输出的引用,引用的就是重定向标准输出产生打开的file。==从IO效率上来讲,command 1>file 2>&1比command 1>file 2>file的效率更高。

原文链接:linux command>file 2>&1 & 命令详解

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号