`

shell中的重定向 1>&2 2>&1 >&2

 
阅读更多
 

shell中的重定向 1>&2 2>&1 >&2

 

当初在shell中, 看到">&1"和">&2"始终不明白什么意思.经过在网上的搜索得以解惑.其实这是两种输出. 

在 shell 程式中,最常使用的 FD (file descriptor) 大概有三个, 分别是: 

0: Standard Input (STDIN) 

1: Standard Output (STDOUT) 

2: Standard Error Output (STDERR) 

在标准情况下, 这些FD分别跟如下设备关联: 

stdin(0): keyboard  键盘输入,并返回在前端 

stdout(1): monitor  正确返回值 输出到前端 

stderr(2): monitor 错误返回值 输出到前端 

举例说明吧: 

当前目录只有一个文件 a.txt. 

[root@redhat box]# ls 

a.txt 

[root@redhat box]# ls a.txt b.txt          

ls: b.txt: No such file or directory     由于没有b.txt这个文件, 于是返回错误值, 这就是所谓的2输出 

a.txt     而这个就是所谓的1输出 

再接着看: 

[root@redhat box]# ls a.txt b.txt  1>file.out 2>file.err 

执行后,没有任何返回值. 原因是, 返回值都重定向到相应的文件中了,而不再前端显示 

[root@redhat box]# cat file.out 

a.txt 

[root@redhat box]# cat file.err 

ls: b.txt: No such file or directory 

一般来说, "1>" 通常可以省略成 ">". 

即可以把如上命令写成: ls a.txt b.txt  >file.out 2>file.err 

有了这些认识才能理解 "1>&2" 和 "2>&1". 

1>&2  正确返回值传递给2输出通道 &2表示2输出通道 

如果此处错写成 1>2, 就表示把1输出重定向到文件2中. 

2>&1 错误返回值传递给1输出通道, 同样&1表示1输出通道. 

举个例子. 

[root@redhat box]# ls a.txt b.txt 1>file.out 2>&1 

[root@redhat box]# cat file.out 

ls: b.txt: No such file or directory 

a.txt 

现在, 正确的输出和错误的输出都定向到了file.out这个文件中, 而不显示在前端. 

补充下, 输出不只1和2, 还有其他的类型, 这两种只是最常用和最基本的. 

 

 

 

上文来自:http://chenyubo.iteye.com/blog/321616

 

下面是百度知道上的一个问题,作为补充说明:http://zhidao.baidu.com/question/194703255.html

 

问:Linux重定向中 >&2 怎么理解?

问题补充:echo "aaaaaaaaaaaaaaaa" >&2 怎么理解?

 

答:

>&2  即 1>&2 也就是把结果输出到和标准错误一样;之前如果有定义标准错误重定向到某log文件,那么标准输出也重定向到这个log文件
如:ls 2>a1 >&2  (等同 ls >a1 2>&1)
把标准输出和标准错误都重定向到a1,终端上看不到任何信息。

 

shell上:
0表示标准输入
1表示标准输出
2表示标准错误输出
> 默认为标准输出重定向,与 1> 相同
2>&1 意思是把 标准错误输出 重定向到 标准输出.
&>file 意思是把 标准输出 和 标准错误输出 都重定向到文件file中

 

用例子说话:


1. grep da * 1>&2 
2. rm -f $(find / -name core) &> /dev/null
上面两例中的 & 如何理解,&不是放到后台执行吗?

牛解:

1.&>file或n>&m均是一个独立的重定向符号,不要分开来理解。

2.明确文件和文件描述符的区别。

3.&>file表示重定向标准输出和错误到文件
例如:
rm -f $(find / -name core) &> /dev/null,/dev/null是一个文件,这个文件比较特殊,所有传给它的东西它都丢弃掉。

4.n>&m表示使文件描述符n成为输出文件描述符m的副本。这样做的好处是,有的时候你查找文件的时候很容易产生无用的信息,如:2> /dev/null的作用就是不显示标准错误输出;另外当你运行某些命令的时候,出错信息也许很重要,便于你检查是哪出了毛病,如:2>&1
例如:
注意,为了方便理解,必须设置一个环境使得执行grep da *命令会有正常输出和错误输出,然后分别使用下面的命令生成三个文件:
grep da * > greplog1
grep da * > greplog2 1>&2   
grep da * > greplog3 2>&1  //grep da * 2> greplog4 1>&2 结果一样
#查看greplog1会发现里面只有正常输出内容
#查看greplog2会发现里面什么都没有

#查看greplog3会发现里面既有正常输出内容又有错误输出内容

 

分享到:
评论

相关推荐

    Linux 命令 shell 重定向 >

    - `2>&1` 表示将错误输出(2)重定向到标准输出(1),这样错误信息也会被输出到屏幕或指定的文件。 - `&> filename` 是一个简化的形式,它同时将标准输出和错误输出都重定向到`filename`。 4. **输出打印不显示*...

    shell 1>&2 2>&1 &>filename重定向的含义和区别

    ### Shell 重定向详解:“1>&2”、“2>&1”与“&>filename”的含义及区别 在Shell脚本编程中,理解不同类型的重定向及其功能是非常重要的。本文将详细解析三种重定向操作——“1>&2”、“2>&1”以及“&>filename”...

    linux shell 中 2>&1的含义

    ### Linux Shell 中 "2>&1" 的含义及应用 #### 基础概念 在Linux Shell环境中,标准输入(Standard Input, STDIN)、标准输出(Standard Output, STDOUT)和标准错误输出(Standard Error, STDERR)是非常重要的...

    cmd 和shell的重定向功能.docx

    然而,Shell通常使用`2>`和`2>>`来分别重定向错误输出,而不是CMD中的`2>&1`语法。 总结来说,CMD和Shell的重定向功能是强大且灵活的工具,它们允许用户在执行命令时自定义输入来源和输出目的地,这对于自动化脚本...

    Shell中重定向的深入讲解

    - 使用`2>&1`合并标准输出和标准错误:例如`sort > output 2>&1`将两者都重定向到`output`。 3. 文件描述符: - 文件描述符是操作系统分配给每个打开文件的唯一标识。0代表标准输入,1代表标准输出,2代表标准...

    Linux下重定向详解

    - `lsyouno 2>&1` 将命令`lsyouno`的标准错误输出重定向到标准输出。 - `lsyes 2>&1` 将命令`lsyes`的标准错误输出重定向到标准输出。 - `2>&1` 再次将这两个命令的标准输出合并,使得它们都通过管道传递给`egrep`。...

    linux shell 中 2>1的含义

    linux shell 中”2>&1″的含义 脚本: nohup /mnt/Nand3/H2000G >/dev/null 2>&1 & 对于& 1 更准确的说应该是文件描述符 1,而1 一般代表的就是STDOUT_FILENO,实际上这个操作就是一个dup2(2)调用.他标准输出到all_...

    详解nohup /dev/null 2>&1 含义的使用

    在 `nohup /mnt/Nand3/H2000G >/dev/null 2>&1 &` 这个例子中,`>/dev/null` 表示将标准输出(文件描述符 1)重定向到 `/dev/null`,这是一个特殊的设备文件,任何写入它的数据都会被丢弃,相当于“黑洞”。`2>&1` ...

    Bash中文件描述符的详细介绍

    例如,`cmd 3>&1 1>&2 2>&3 3>&-`这条命令会交换stdin和stdout,具体步骤如下: 1. 3>&1:将描述符3设置为与描述符1相同,即stdout。 2. 1>&2:将stdout(现在是3)设置为stderr。 3. 2>&3:将stderr设置为原来的...

    linux中的重定向问题

    在这个示例中,我们创建了一个新的shell实例,并通过参数字符串`"cat abc.txt > xyz.txt"`来执行重定向操作。这种方式可以正确地将`abc.txt`的内容重定向到`xyz.txt`中。 #### 知识点五:高级技巧——使用`getdelim...

    深入理解Linux shell中2>&1的含义(全网最全,看完就懂)

    在Linux shell中,`2>&1` 是一个关键的输入/输出重定向操作符,用于合并标准错误输出(stderr)和标准输出(stdout)。本文将深入解析这一概念,并通过实例来帮助你理解其背后的原理。 首先,理解在Linux中,0、1、...

    Shell 输入输出重定向命令解析.doc

    若要合并STDOUT和STDERR,可以使用`command > file 2>&1`或`command >> file 2>&1`。 此外,Here Document是另一种输入重定向形式,常用于向交互式脚本或程序提供多行输入。基本语法是`command ,其中`document`在...

    shell中1小于/dev/null 2大于&1的含义

    在Shell脚本编程中,`>/dev/null 2>&1` 是一个常见的命令行操作,它的目的是将命令的输出(包括标准输出和标准错误)都重定向到一个特殊的地方——`/dev/null`,通常被称为“黑洞”或者“空设备文件”。这个文件的...

    shell脚本中取消重定向的方法实例

    在命令行中,我们看到的是函数调用和条件判断的执行过程,这是由于使用了 `set -x` 来开启命令追踪,这部分输出是标准错误(2),在执行 `exec 2>&4` 之后,标准错误被重定向回了显示器。而在日志文件中,我们看到的...

    linux中的重定向.pdf

    6. "2>&1"操作符可以将标准错误输出重定向到标准输出的位置。例如,如果想同时捕获命令的标准输出和错误输出到同一个文件中,可以使用命令"ls /nonexistentdir &> alloutput"。 7. "操作符用于从键盘接收输入,但它...

    Linux重定向_All.pdf

    - "mysh > mylog.txt 2>&1" 将mysh命令的标准输出和错误都重定向到mylog.txt文件中。 - "wc 使用wc命令计算文件中的单词数,将文件file作为wc命令的标准输入。 - "cmd >> file 2>&1" 将cmd命令的标准输出追加到文件...

    基于C++实现简单的(控制台)词法分析器及指令注册【100012163】

    简单的词法分析器:Splitter 除满足普通的参数解析需求,还支持添加关键字,实现 >a-file.txt 分割成 > a-file.txt 的功能。...本 Shell 支持使用 > >> 1> 1>> 2> 2>> &1 &2 和 自定义输入输出和错误输出`。

    Linux base shell重定向详解

    - `Command > filename 2>&1`:同时将标准输出和错误输出重定向到`filename`。 - `Command 2> filename`:仅将标准错误输出重定向到`filename`,原有标准输出不变。 - `Command 2 >> filename`:追加标准错误到`...

    linux shell数据重定向(输入重定向与输出重定向)详细分析

    - `ls test.sh test1.sh 2>&1`:将错误输出重定向到与标准输出相同的地方,即合并输出。 - `ls test.sh test1.sh 2>/dev/null`:将错误输出丢弃,不显示在屏幕上。 此外,还可以使用`&>`(或`>&`)将标准输出和错误...

    shell中1小于/dev/null 2大于1的含义

    shell中可能经常能看到:>/dev/null 2>&1 命令的结果可以通过%>的形式来定义输出 /dev/null 代表空设备文件 > 代表重定向到哪里,例如:echo “123” > /home/123.txt 1 表示stdout标准输出,系统默认值是1,所以”>...

Global site tag (gtag.js) - Google Analytics