Chinaunix首页 | 论坛 | 博客
  • 博客访问: 169681
  • 博文数量: 49
  • 博客积分: 1093
  • 博客等级: 少尉
  • 技术积分: 525
  • 用 户 组: 普通用户
  • 注册时间: 2012-02-21 14:31
文章分类

全部博文(49)

文章存档

2012年(49)

我的朋友

分类: LINUX

2012-02-21 15:16:55

#1 * * * *  sh /app/moss/analyser/start_analyser.sh > /dev/null 2>&1

在定时任务中经常看到“> /dev/null 2>&1”这样的后缀,今天在这里给大家举例做解释:

   在类Unix系统中,/dev/null,或称空设备,是一个特殊的设备文件,它丢弃一切写入其中的数据(但报告写入操作成功),读取它则会立即得到一个EOF[1]。在程序员行话,尤其是Unix行话中,/dev/null被称为bit bucket[2]或者黑洞。

/tmp/test.sh > /tmp/test.log 2>&1

前半部分/tmp/test.sh > /tmp/test.log很容易理解,那么后面的2>&1是怎么回事呢?

要解释这个问题,还是得提到文件重定向。我们知道>和<是文件重定向符。那么1和2是什么?在shell中,每个进程都和三个系统文件相关 联:标准输入stdin,标准输出stdout和标准错误stderr,三个系统文件的文件描述符分别为0,1和2。所以这里2>&1的意 思就是将标准错误也输出到标准输出当中。

下面通过一个例子来展示2>&1有什么作用:

$ cat test.sh
t
date

test.sh中包含两个命令,其中t是一个不存在的命令,执行会报错,默认情况下,错误会输出到stderr。date则能正确执行,并且输出时间信息,默认输出到stdout

./test.sh > test1.log
./test.sh: line 1: t: command not found

$ cat test1.log
Tue Oct 9 20:51:50 CST 2007

可以看到,date的执行结果被重定向到log文件中了,而t无法执行的错误则只打印在屏幕上。

$ ./test.sh > test2.log 2>&1

$ cat test2.log
./test.sh: line 1: t: command not found
Tue Oct 9 20:53:44 CST 2007

这次,stderr和stdout的内容都被重定向到log文件中了。

实际上, > 就相当于 1> 也就是重定向标准输出,不包括标准错误。通过2>&1,就将标准错误重定向到标准输出了,那么再使用>重定向就会将标准输出和标准错误信息一同重定向了。如果只想重定向标准错误到文件中,则可以使用2> file


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

上一篇:UltraEdit使用经验

下一篇:进制间转换

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