Unix系统数据流重定向及相关问题

系统 其他OS
Unix系统有几种输入输出流,它们分别与几个数字有如下的对应关系:0-标准输入流(stdin),1-标准输出流(stdout),2-标准错误流 (stderr)。

我们经常会在Unix系统下的一些脚本中看到类似”2>&1″这样的用法,例如“/path/to/prog 2>&1 > /dev/null &”,那么它的具体含义是什么呢?

Unix系统有几种输入输出流,它们分别与几个数字有如下的对应关系:0-标准输入流(stdin),1-标准输出流(stdout),2-标准错误流 (stderr)。

"2>&1"的意思就是将stderr重定向至stdout,并一起在屏幕上显示出来。如果不加数字,那么默认的Unix系统重定向动作是针对stdout(1)的,比如”ls -l > result”就等价于”ls -l 1 > result”。这样便于我们更普遍性的理解重定向过程。

下面举例说明:
 

  1. #cat std.sh  
  2. #!/bin/sh  
  3. echo “stdout”  
  4. echo “stderr” >&2  
  5. #/bin/sh std.sh 2>&1 > /dev/null  
  6. stderr  
  7. #/bin/sh std.sh > /dev/null 2>&1 

第一条命令的输出结果是stderr,因为stdout和stderr合并后一同重定向到/dev/null,但stderr并未被清除,因此仍将在屏幕中显示出来;第二条命令无输出,因为当Unix系统 stdout重定向至/dev/null后,stderr又重定向到了stdout,这样stderr也被输出到了/dev/null。

/dev/null是什么设备?

/dev/null是“垃圾黑洞”,所有无用的东西都可以写到里面区。举个实例,你把一个文件move到/dev/null,那他就永远消失了,就想掉进了黑洞里。 并不是什么具体的设备。一些不想现实的信息都可以重定向到/dev/null中。

通常用法: #/bin/sh std.sh > /dev/null 2>&1 把标准输出了标准出错都重定向到/dev/null,就是空设备,不现实出错信息。 nohup sh std.sh>/dev/null 2>&1 &,此时nohup.out中将没有信息。

在Unix系统中,数据流重定向问题,我们就讲解到这里了。

【编辑推荐】

  1. Unix系统操作中命令知识学习之前准备
  2. Unix系统运行级别知识讲解
  3. Unix系统中环境变量知识讲解
  4. 出自一个unix锁的问题解答
  5. 基本Unix shell知识介绍
责任编辑:小霞
相关推荐

2010-04-20 15:25:12

Unix操作系统

2010-05-04 14:42:33

Unix操作系统

2009-06-17 09:11:24

Unix管道重定向

2009-06-17 17:13:40

UNIX

2012-07-30 08:31:08

Storm数据流

2009-12-10 14:42:22

Linux操作系统

2009-07-15 09:06:11

Linux图形系统X11的CS架构

2010-12-14 15:07:15

ICMP路由重定向

2016-08-23 17:21:51

UnixLinux重定向

2010-03-19 09:22:02

linux命令应用及语

2009-06-25 14:54:22

Servlet转发Servlet重定向

2022-03-18 08:57:17

前端数据流选型

2009-08-19 10:41:12

Java输入数据流

2011-12-14 15:57:13

javanio

2010-05-04 11:59:39

Unix系统

2010-05-04 14:34:16

Unix系统

2010-04-29 14:56:06

Unix系统

2016-11-14 19:01:36

数据流聊天系统web

2012-06-14 09:32:17

虚拟化

2020-12-09 11:10:12

shellLinux管道
点赞
收藏

51CTO技术栈公众号