shell命令 2>&1

5 篇文章 0 订阅

在unix高级环境编程第三章的习题有一个问题:
./a.out > outfile 2>&1  # 1
./a.out 2&1 > outfile  # 2
问这两者有什么区别。


这个首先的说明几点:
1.在unix和类unix(linux之类)中以文件描述符的形式打开一个文件,这个文件描述符是一个非负数。
2.0代表标准输入,1代表标准输出,2代表标准错误输出
3.默认的情况下是1 所以> equal 1>,比如我们用文件描述符5打开了一个文件a,可以写成5>
4.shell命令的执行是从左往右


那么现在来看这两者有什么区别
对于第一条命令
,首先是将a.out的内容标准输出,然后通过>(等价于1>,所以只对标准输出起作用)重定向到outfile,然后2>&1说明标准错误输出也往标准输出去,而由于之前标准输出以及重定向到了outfile,所以这里的错误输出也会重定向到outfile。



再看第二条命令,首先是a.out到标准输出,然后2>&1,所以标准错误输出也重定向到保准输出(注意此时的标准输出没有被重定向,所以默认是终端上),然后 > outfile ,这个说明此时再将标准输出到outfile,但是请注意标准错误输出2>不会也跟着被重定向到outfile,因为更改标准输出重定向在2>&1的后面。


至此你明白了吧,不信你可以自己试试这个结果,比如按照我下面的:


angbosen@db-9:~/shell-comand$ echo "aaa" > out.file 2>&1
angbosen@db-9:~/shell-comand$ cat out.file
aaa
angbosen@db-9:~/shell-comand$ echo "aaa" 2>&1 > out2.file
angbosen@db-9:~/shell-comand$ cat out2.file
aaa
angbosen@db-9:~/shell-comand$ cmd "aaa" 2>&1 > out2.file
-bash: cmd: command not found
hangbosen@db-9:~/shell-comand$ cmd "aaa" > out.file 2>&1
angbosen@db-9:~/shell-comand$ cat out.file
-bash: cmd: command not found


理解了吧,真的挺有意思的。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值