Chinaunix首页 | 论坛 | 博客
  • 博客访问: 720188
  • 博文数量: 77
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1173
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-16 11:20
个人简介

将技术做到极致...

文章分类

全部博文(77)

文章存档

2019年(3)

2015年(27)

2014年(47)

分类: LINUX

2014-12-29 14:57:40


执行命令是
    /home/admin/demo.sh >/dev/null 2>&1 &

    对于& 1 更准确的说应该是文件描述符 1,而1标识标准输出,stdout。

   对于2 ,表示标准错误,stderr。

   2>&1 的意思就是将标准错误重定向到标准输出。这里标准输出已经重定向到了 /dev/null。那么标准错误也会输出到/dev/null

   最后一个& 是让程序在后台执行。

为何2>&1要写在后面?

   command > file 2>&1

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

   command 2>&1 >file

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

用strace可以看到:

   1. command > file 2>&1

   这个命令中实现重定向的关键系统调用序列是:

   open(file) == 3

   dup2(3,1)

   dup2(1,2)

   2. command 2>&1 >file

   这个命令中实现重定向的关键系统调用序列是:

   dup2(1,2)

   open(file) == 3

   dup2(3,1)

阅读(3154) | 评论(0) | 转发(0) |
0

上一篇:Linux Kernel 开发指导

下一篇:sed之快于grep

给主人留下些什么吧!~~