欢迎您,零度科技专业海外服务器租用
公司电话: 24小时电话: 

当前位置:首页>帮助教程>Linux 系统教程

目录导航

shell 编程之2>&1

亚洲服务器 发布于 2014-01-16   shellshell编程
Linux 系统教程

经常可以在一些脚本,尤其是在crontab调用时发现如下形式的命令调用

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

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

要解释这个问题,还是得提到文件重定向。

我们知道>和<是文件重定向符。那么1和2是什么?

在shell中,每个进程都和三个系统文件相关联:

标准输入stdin  文件描述符分别为1

标准输出stdout文件描述符分别为2

标准错误stderr文件描述符分别为3

所以这里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无法执行的错误打印在屏幕上。

 

后面跟上2>&1

$ ./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的内容都也被重定向到log文件中了。

实际上,>就相当于1>(默认是标准输出,所以可以省写),也就是重定向标准输出,不包括标准错误。

通过2>&1,就将标准错误重定向到标准输出了,那么再使用 > 重定向就会将标准输出和标准错误信息一起重定向了。

如果只想重定向标准错误到文件中,则可以使用2>文件名。

原文来自零度科技:http://www.ldisp.com/a/linux/2014/2593.shtml

上一篇:CentOS升级python到2.6
下一篇:linux命令stty学习

 
了解零度?

零度科技主营全球服务器租用,如果您有服务器租用需求请联系

海外服务器租用

推荐香港、美国、韩国。提供站群服务器、高防服务器租用

海外特价服务器

关注零度特价服务器频道,了解全球特价服务器。

0

业务咨询

    技术服务

      特价活动
        全站搜索
        热门搜索:
        会员
        0通知
        客服
        0特价
        搜索
        TOP
        香港高防服务器,远程桌面,韩国服务器,nginx,反向代理