`
sealbird
  • 浏览: 583727 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

关于shell命令的定向输出 2>&1 .

 
阅读更多
分类: 脚本与批处理 2006-08-23 15:13 3473人阅读 评论(0) 收藏 举报
mycommand >mylog.txt 2>&1 应该是最经典的用法了。

命令的结果可以通过“%>”的形式来定向输出,%表示文件描述符:1为标准输出stdout、2为标准错误stderr。系统默认%值是1,也就是“1>”,而1>可以简写为>,也就是默认为>。stdout的默认目标是终端,stderr的默认目标为也是终端。我们在批处理中执行: echo text >result.txt ,我们就可以在屏幕上会看到 echo text 1>result.txt ,即是这个道理。

其中&需要直接与重定向符号结合使用。

参考:
1、http://www.google.cn/search?q="2>%261"
2、http://www.microsoft.com/technet/prodtechnol/windowsserver2003/zh-chs/library/ServerHelp/04969a04-a424-4776-bdc7-dc5066ce79b2.mspx?mfr=true

应用实例:

1、将结果输出到result.txt
net stop myservices >>result 2>&1

2、隐藏程序输出结果
net stop myservices >nul 2>nul



--------------------------------------------------------------------------------
微软关于重定向的文章:

使用命令重定向操作符
更新日期: 01/21/2005
使用命令重定向操作符
可以使用重定向操作符将命令输入和输出数据流从默认位置重定向到其他位置。输入或输出数据流的位置称为句柄。

下表将列出可用的句柄。


 
句柄 句柄的数字代号 描述
STDIN
0
键盘输入

STDOUT
1
输出到命令提示符窗口

STDERR
2
错误输出到命令提示符窗口

UNDEFINED
3-9
句柄由应用程序单独定义,它们是各个工具特有的





数字 0 到 9 代表前 10 个句柄。可以使用命令 Cmd.exe 运行程序,并对该程序前 10 个句柄中的任何一个句柄进行重定向。要指定要用的句柄,请在重定向操作符之前键入该句柄的数字。如果未定义句柄,则默认的 < 重定向输入操作符是 0,而默认的 > 重定向输出操作符是 1。键入 < 或 > 操作符之后,必须指定数据的读写位置。可以指定文件名或其他现有的句柄。

要指定重定向到现有句柄,请使用与 (&) 字符,后面接要重定向的句柄号(即 &句柄号)。例如,下面的命令可以将句柄 2(即 STDERR)重定向到句柄 1(即 STDOUT):

2>&1

下表列出了可用于重定向输入和输出数据流的操作符。


 
重定向操作符 描述
>
将命令输出写入到文件或设备(如打印机),而不是命令提示符窗口或句柄。

<
从文件而不是从键盘或句柄读入命令输入。

>>
将命令输出添加到文件末尾而不删除文件中已有的信息。

>&
将一个句柄的输出写入到另一个句柄的输入中。

<&
从一个句柄读取输入并将其写入到另一个句柄输出中。

|
从一个命令中读取输出并将其写入另一个命令的输入中。也称作管道。





默认情况下,可以从键盘将命令输入(即 STDIN 句柄)发送到 Cmd.exe,然后由 Cmd.exe 将命令输出(即 STDOUT 句柄)发送到命令提示符窗口。

重定向输入 (<)
要通过键盘将输入重定向到文件或设备,请使用 < 操作符。例如,要从 File.txt 获取 sort 命令的输入,请键入:

sort<file.txt

File.txt 的内容将以字母顺序列表的方式显示在命令提示符窗口中。

< 操作符可以打开具有只读访问权限的指定文件名。因此,不能在使用该操作符时向文件中写入信息。例如,如果以 <&2 启动程序,则所有试图读取句柄 0 的操作都将失败,因为句柄 2 最初是以只写访问方式打开的。

注意


• 0 是 < 重定向输入操作符的默认句柄。



重定向输出 (>)
几乎所有的命令都将输出发送到命令提示符窗口。即使将输出发送到驱动器或打印机的命令也会在命令提示符窗口显示消息和提示。

要将输出从命令提示符窗口重定向到文件或设备,请使用 > 操作符。可以在许多命令中使用该操作符。例如,要将 dir 输出重定向到 Dirlist.txt,请键入:

dir>dirlist.txt

如果 Dirlist.txt 不存在,Cmd.exe 将创建该文件。如果 Dirlist.txt 存在,Cmd.exe 将使用 dir 命令的输出替换文件中的信息。

要运行 netsh routing dump 命令,然后将输出发送到 Route.cfg,请键入:

netsh routing dump>c:/route.cfg

> 操作符可以打开具有只写访问权限的指定文件。因此,不能使用该操作符读取文件。例如,如果使用重定向操作符 >&0 启动程序,则写入句柄 1 的所有尝试操作都将失败,因为句柄 0 最初是以只读访问方式打开的。

注意


• 1 是 > 重定向输出操作符的默认句柄。



复制句柄
重定向操作符 & 可以将输出或输入从一个指定句柄复制到另一个指定的句柄。例如,要将 dir 输出发送到 File.txt 并将错误输出发送到 File.txt,请键入:

dir>c:/file.txt 2>&1

复制句柄时,可以复制该句柄原状态的所有特性。例如,如果一个句柄具有只读访问的属性,则该句柄的所有副本都具有只读访问属性。不能将一个具有只读访问属性的句柄复制到另一个具有只写访问属性的句柄。

使用 & 操作符重定向输入和副本
要将重定向输入操作符 (<) 与复制操作符 (&) 结合使用,指定的文件必须已经存在。如果输入文件存在,Cmd.exe 将以只读方式打开该文件,然后将文件包含的字符作为输入发送到此命令(如同从键盘输入一样)。如果指定了句柄,Cmd.exe 将指定的句柄复制到系统现有的句柄中。

例如,要以句柄 0 输入读取(即 STDIN)的方式打开 File.txt,请键入:

<file.txt

要打开 File.txt,并在内容排序后将输出发送到命令提示符窗口(即 STDOUT),请键入:

sort<file.txt

要查找 File.txt,然后将句柄 1(即 STDOUT)和句柄 2(即 STDERR)重定向到 Search.txt,请键入:

findfile file.txt>search.txt 2<&1

要以句柄 0 输入读取(即 STDIN)的方式复制用户定义的句柄 3,请键入:

<&3

使用 & 操作符重定向输出和复制
如果将输出重定向到文件且指定了现有的文件名,Cmd.exe 将以只写方式打开文件并覆盖该文件内容。如果指定了句柄,Cmd.exe 将文件复制到现有句柄中。

要将用户定义的句柄 3 复制到句柄 1,请键入:

>&3

要将包括句柄 2(即 STDERR)的所有输出从 ipconfig 命令重定向到句柄 1(即 STDOUT),然后将输出重定向到 Output.log,请键入:

ipconfig.exe>>output.log 2>&1

使用 >> 重定向操作符附加输出
要从命令中将输出添加到文件末尾而不丢失文件中已存在的任何信息,请使用两个连续的大于号(即 >>)。例如,使用下列命令可以将 dir 命令生成的目录列表附加到 Dirlist.txt 文件:

dir>>dirlist.txt

要将 netstat 命令的输出附加到 Tcpinfo.txt 的末尾,请键入:

netstat>>tcpinfo.txt

使用管道操作符 (|)
管道操作符 (|) 可以提取一个命令的输出(默认情况下是 STDOUT),然后将其定向到另一个命令的输入(默认情况下是 STDIN)中。例如,使用下面的命令可以对目录进行分类:

dir | sort

在本例中,将同时启动两个命令,但随后 sort 命令会暂停,直到它接收到 dir 命令的输出为止。sort 命令使用 dir 命令的输出作为输入,然后将输出发送到句柄 1(即 STDOUT)。

合并带重定向操作符的命令
通过合并带有其他命令和文件名的筛选器命令,可以创建自定义命令。例如,可以使用以下命令存储包含“LOG”字符串的文件名:

dir /b | find "log" loglist.txt

dir 命令的输出是通过 find 筛选器命令进行发送的。包含字符串“LOG”的文件名作为文件名列表(例如,NetshConfig.log、Logdat.svd 和 Mylog.bat)存储在文件 Loglist.txt 中。

要在相同命令中使用多个筛选器,请使用管道 (|) 分隔筛选器。例如,下面的命令将搜索 C 盘上的每个目录以查找包含“LOG”字符串的文件名,并且在命令提示符窗口中每次显示一屏:

dir c:/ /s /b | find "log" | more

利用管道 (|) 可以对 Cmd.exe 进行定向,使其通过 find 筛选器命令发送 dir 命令输出。find 命令只选择包含字符串“LOG”的文件名。more 命令可以显示 find 命令选择的文件名(在命令提示符窗口中每次显示一屏)。有关筛选器命令的详细信息,请参阅使用筛选器。
分享到:
评论

相关推荐

    shell浅谈之八IO重定向.docx

    - `command &gt; file 2&gt;&1`:将命令的标准输出和错误输出都重定向到同一个文件。 - `command &lt; input.txt &gt; output.txt 2&gt; errors.log`:从 input.txt 输入,将命令的标准输出写入 output.txt,错误输出写入 errors....

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

    总的来说,`2&gt;&1`在Linux shell中是一个强大的工具,允许你方便地管理和控制命令的输出。掌握这个操作符,可以更好地调试脚本、记录日志,以及在自动化任务中实现预期的行为。通过实践和理解这些基础知识,你将能够...

    一文学会重定向.zip

    9. **历史记录重定向**:在shell脚本中,`exec`命令可以改变已打开的文件描述符,比如将stdout和stderr重定向到日志文件,然后执行命令:`exec &gt; log.txt 2&gt;&1`。 10. **重定向到/dev/null**:这个特殊的设备会丢弃...

    shell命令文档 中文版

    在IT领域,Shell命令是Linux和Unix操作系统中的一个强大工具,它允许用户通过文本界面与操作系统进行交互。这本书“shell命令文档 中文版”提供了一个全面的指南,涵盖了所有基本到高级的Shell命令,这对于系统管理...

    [Ubuntu.Linux.基础视频教程].4.4.Shell.输入输出重定向

    了解了这些基础知识后,我们还可以结合使用I/O重定向,实现更复杂的操作,如重定向错误输出到特定文件,或者使用`nohup`命令在后台运行程序并重定向输出,使其即使在用户退出登录后仍能继续运行。 在实际工作中,...

    dos批处理脚本命令详解

    符号`&gt;`用于重定向输出,将命令的结果写入到指定文件;符号`&gt;&gt;`则是追加重定向,将新内容添加到已有文件的末尾,而不是覆盖原有内容。 接下来,我们看一个稍微复杂一点的例子,比如清除QQ广告的批处理脚本(`a.bat`...

    shell常用命令整理

    - `&gt;&gt;`:追加重定向输出。 ##### 10. `echo` 命令 - **功能**:向标准输出打印文本。 - **参数**: - `-n`:不自动换行。 - `-e`:启用转义字符处理。 - **示例**: - `echo "Hello World"`:打印文本`Hello ...

    shell学习.pdf

    Shell脚本是Linux和Unix操作系统中的重要工具,它允许用户编写一系列命令,形成一个可执行文件,方便批量处理任务和自动化工作流程。本篇将深入探讨Shell脚本的基础知识,包括脚本的基本结构、执行方式以及输入输出...

    linux中的重定向.pdf

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

    C实现Linux中Shell部分命令.zip

    本项目旨在用C语言实现一些基本的Shell命令,如ls、rm和echo,这些都是日常操作中最常用的。 1. **ls命令**:用于列出当前目录中的文件和目录。在C实现中,这通常涉及到调用`opendir()`函数打开目录,然后使用`...

    Linuxl下C编程系列-Shell命令

    ### Linux下的C编程系列——Shell命令详解 #### 一、概述 在Linux系统中,Shell是一种用户界面,允许用户通过命令行与操作系统进行交互。Shell不仅提供了基础的命令执行功能,还支持各种高级特性,例如变量、条件...

    java调用shell

    // 执行Shell脚本并重定向输出到文件 System.out.println(ExecCmd.execCmd("/home/work/bian_wei/workspace/src/gethudsoninfo.sh -t1 &gt; /home/work/dashboard.log 2&gt;&1")); } } ``` 上述代码展示了如何在Java中...

    Shell的18条常用命令整理

    * cat file1 file2 &gt; file3 把 file1 和 file2 的内容结合起来,并重定向到 file3 文件中。 10. echo 命令 echo 命令的使用频率不少于 ls 和 cat,尤其是在 shell 脚本编写中。 * echo [-ne][字符串]:将输入的...

    shell语法与编程精选.

    1. **重定向**:`&gt;`用于输出重定向,`&gt;&gt;`用于追加重定向,`用于输入重定向。例如: ```bash echo "Hello" &gt; output.txt cat input.txt &gt;&gt; appended.txt ``` 2. **管道**:`|`用于连接两个命令,将前一个命令的...

    shell编程课堂练习1[文].pdf

    make &&gt; make_log & # 后台执行并重定向输出 # 判断任务完成的方法不详,通常可能需要检查特定的输出或状态 ``` **2.3 Exercise:引号** 1. 查询字符串`hello`:`grep 'hello' myfile` 2. 输出"The pen is $2":`...

    shell 指南 shell 指南

    ### Shell指南:深入理解Unix Shell命令 #### 一、输出入转向:掌握数据流的导向艺术 在Unix环境中,每一个进程都有三个预设的文件描述符:标准输入(standard input)、标准输出(standard output)以及标准错误输出...

    Linux操作系统-shell命令

    错误输出可以通过`2&gt;`进行定向。 - **管道操作**:使用`|`符号,可以将一个命令的输出作为另一个命令的输入,实现命令链式操作。 此外,还有一些与系统管理相关的命令: - `shutdown -h now`:立即关机。 - `...

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

    - `ls test.sh test1.sh 1&gt;&gt;suc.txt 2&gt;&gt;err.txt`:追加重定向,将正确输出和错误输出分别追加到suc.txt和err.txt。 - `ls test.sh test1.sh 2&gt;&1`:将错误输出重定向到与标准输出相同的地方,即合并输出。 - `ls ...

Global site tag (gtag.js) - Google Analytics