转载http://blog.csdn.net/pastgift/article/details/6992092
#man bash 里面有一段有关重定向的描述:
Note that the order of redirections is significant. For example, the
command
ls > dirlist 2>&1
directs both standard output and standard error to the file dirlist,
while the command
ls 2>&1 > dirlist
directs only the standard output to file dirlist, because the standard
error was duplicated as standard output before the standard output was
redirected to dirlist.
辗转各个社区,终于算是略微明白了一点。
上面第一条命令:#ls >dirlist 2>&1
把标准输出(STDOUT,1)和标准错误(STDERR,2)都重定向到文件 dirlist 的过程如下:
0 命令执行前
(此时:STDOUT指向终端、STDERR 也指向终端)
1 建立名为 dirlist 的空文件
2 执行 > dirlist
(因为 > 默认为重定向 STDOUT ,即该步骤将 STDOUT 重定向为 文件dirlist)
(此时:STDOUT指向 文件dirlist、STDERR 指向终端)
3 执行 2>&1 ,简单的说,就是 STDERR 变得和 STDOUT 一样。换句话说,就是把 STDERR 重定向为 “STDOUT 所指向的东西”
(因为之前 STDOUT 已经指向了 文件dirlist,所以执行到该步骤时,STDERR 也重定向到了 文件dirlist)
(此时:STDOUT指向 文件dirlist、STDERR 也指向 文件dirlist)
4 执行 ls,则由于执行 ls 所产生的标准输出和标准错误信息都被输出到了 文件dirlist 里面。
上面的第二条命令:#ls 2>&1 > dirlist
仅仅把标准输出重定向到了 文件dirlist中(标准错误依然是终端)
我们依然一步一步走,看看为什么:
0 命令执行前
(此时:STDOUT指向终端、STDERR 也指向终端)
1 建立名为 dirlist 的空文件
2 执行 2>&1
(因为原来 STDOUT 和 STDERR 都指向终端,所以相当于,把 STDERR 从终端,重定向为终端……)
(此时:STDOUT指向终端、STDERR 也依然指向终端)
3 执行 > dirlist,把 STDOUT 重定向为 文件dirlist
(此时:STDOUT指向 文件dirlist、STDERR 依然指向终端)
4 执行 ls,那么,产生的 STDOUT 输出到了 文件dirlist里面,而 STDERR 输出到了终端
另外,要将 STDOUT 和 STDERR 都输出到文件,也可以这么写:
#ls &> dirlist
这样还比较方便一点。
以下是相关讨论的地址:
http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-3.html#ss3.2
http://bbs.chinaunix.net/viewthread.php?tid=16361
http://www.linuxsir.com/bbs/showthread.php?threadid=38203
http://www.linuxsir.com/bbs/showthread.php?threadid=40501&highlight=%D6%D8%B6%A8%CF%F2
分享到:
相关推荐
### Linux Shell 中 "2>&1" 的含义及应用 #### 基础概念 在Linux Shell环境中,标准输入(Standard Input, STDIN)、标准输出(Standard Output, STDOUT)和标准错误输出(Standard Error, STDERR)是非常重要的...
- `2>&1` 表示将错误输出(2)重定向到标准输出(1),这样错误信息也会被输出到屏幕或指定的文件。 - `&> filename` 是一个简化的形式,它同时将标准输出和错误输出都重定向到`filename`。 4. **输出打印不显示*...
- `lsyouno 2>&1` 将命令`lsyouno`的标准错误输出重定向到标准输出。 - `lsyes 2>&1` 将命令`lsyes`的标准错误输出重定向到标准输出。 - `2>&1` 再次将这两个命令的标准输出合并,使得它们都通过管道传递给`egrep`。...
linux shell 中”2>&1″的含义 脚本: nohup /mnt/Nand3/H2000G >/dev/null 2>&1 & 对于& 1 更准确的说应该是文件描述符 1,而1 一般代表的就是STDOUT_FILENO,实际上这个操作就是一个dup2(2)调用.他标准输出到all_...
在Linux shell中,`2>&1` 是一个关键的输入/输出重定向操作符,用于合并标准错误输出(stderr)和标准输出(stdout)。本文将深入解析这一概念,并通过实例来帮助你理解其背后的原理。 首先,理解在Linux中,0、1、...
### Linux中的重定向问题 #### 知识点一:Linux重定向基础概念 在Linux操作系统中,重定向是一种非常实用且强大的功能,它允许用户控制命令的输入与输出流,而不是按照默认方式处理。通常情况下,Linux命令会从...
6. "2>&1"操作符可以将标准错误输出重定向到标准输出的位置。例如,如果想同时捕获命令的标准输出和错误输出到同一个文件中,可以使用命令"ls /nonexistentdir &> alloutput"。 7. "操作符用于从键盘接收输入,但它...
内容概要:本文详细介绍了Linux shell脚本编程中的几个核心知识点,包括输入输出重定向、Shell变量操作、基本的Shell编程技巧以及简单的算术运算方法。每个知识点都有详细的命令演示和具体的应用实例,帮助读者更好...
- "mysh > mylog.txt 2>&1" 将mysh命令的标准输出和错误都重定向到mylog.txt文件中。 - "wc 使用wc命令计算文件中的单词数,将文件file作为wc命令的标准输入。 - "cmd >> file 2>&1" 将cmd命令的标准输出追加到文件...
常见的重定向符号有`>`用于覆盖输出,`>>`用于追加输出,`2>`用于重定向错误信息。例如,`echo "Hello, World!" > test.txt` 将打印的文本保存到test.txt文件中,而不会在屏幕上显示。 **Shell编程**: 在我们的...
- `command > file 2>&1`:将命令的标准输出和错误输出都重定向到同一个文件。 - `command < input.txt > output.txt 2> errors.log`:从 input.txt 输入,将命令的标准输出写入 output.txt,错误输出写入 errors....
总结来说,`nohup` 命令与重定向操作符的组合,如 `nohup command > /dev/null 2>&1 &`,是 Linux 系统中常用的技术,用于在后台运行进程并丢弃所有输出,以确保进程的持续运行不受用户交互的影响。理解这些基本概念...
例如,“command > file”命令会将命令的输出重定向到名为file的文件中,而“command ”则会将file文件的内容作为命令的输入。 通过掌握Shell的使用,环境变量的设置,以及管道与重定向的基本适用方法,用户能够...
然而,Shell通常使用`2>`和`2>>`来分别重定向错误输出,而不是CMD中的`2>&1`语法。 总结来说,CMD和Shell的重定向功能是强大且灵活的工具,它们允许用户在执行命令时自定义输入来源和输出目的地,这对于自动化脚本...
本文将深入探讨Linux Shell中的输入-输出重定向的基本概念、常用符号以及实际应用场景。 #### 二、基础知识 ##### 2.1 什么是输入-输出重定向 输入-输出重定向是指在执行命令时重新指定命令的标准输入或标准输出流...
- 将命令的输出和错误都重定向到同一个文件:`command > outfile 2>&1` - 丢弃错误输出:`command 2> /dev/null` 3. **脚本组成与运行**: - 脚本通常以`#!/bin/bash`开头,指定解释器。 - 脚本命名通常以`.sh`...
若要合并STDOUT和STDERR,可以使用`command > file 2>&1`或`command >> file 2>&1`。 此外,Here Document是另一种输入重定向形式,常用于向交互式脚本或程序提供多行输入。基本语法是`command ,其中`document`在...
在Shell脚本编程中,`>/dev/null 2>&1` 是一个常见的命令行操作,它的目的是将命令的输出(包括标准输出和标准错误)都重定向到一个特殊的地方——`/dev/null`,通常被称为“黑洞”或者“空设备文件”。这个文件的...
- `ls test.sh test1.sh 2>&1`:将错误输出重定向到与标准输出相同的地方,即合并输出。 - `ls test.sh test1.sh 2>/dev/null`:将错误输出丢弃,不显示在屏幕上。 此外,还可以使用`&>`(或`>&`)将标准输出和错误...