linux open file command,linux command>file 2>&1 & 命令详解

本文详细解析了Shell命令中的输出重定向,包括标准输入、标准输出和标准错误输出的概念,以及如何使用>、2>、2>&1等符号进行重定向。通过实例演示了不同重定向组合对命令输出的影响,强调了标准输出和标准错误输出重定向的效率和正确性问题。
摘要由CSDN通过智能技术生成

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:37JST //标准输出显示到显示器

[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:22JST

[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:20JST //标准输出未重定向,标准输出默认输出到显示器

[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:32JST

[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:45JST

[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:29JST

[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:17JST

ne3: 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的效率更高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值