shell 2>&1含义

详细理解 > /dev/null 2>&1 - 微信公众号--共鸣圈 - 博客园

shell 标准输入标准输出错误输出_sa726663676的博客-优快云博客_shell只输出错误信息

0:表示键盘输入(stdin)
1:表示标准输出(stdout),系统默认是1
2:表示错误输出(stderr)

"command >/dev/null 2>&1 &"  与 "command 1>/dev/null 2>&1 &"  的意思一样

1) command:    表示shell命令或者为一个可执行程序

2)1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null

      1 >/dev/null:表示标准输出重定向到空设备文件,也就是不输出任何信息到终端,不显示任何信息。
3) >:       表示重定向到哪里
4) /dev/null:  表示Linux的空设备文件


5) 2:      表示标准错误输出
6) &1:     &表示等同于的意思,  2>&1表示2的输出重定向于1
7) &:    表示后台执行,即这条指令执行在后台运行

command < filename                         把标准输入重定向到filename文件中
command 0< filename                       把标准输入重定向到filename文件中

command > filename                         把标准输出重定向到filename文件中(覆盖)
command 1> fielname                       把标准输出重定向到filename文件中(覆盖)

command >> filename                       把标准输出重定向到filename文件中(追加)
command 1>> filename                     把标准输出重定向到filename文件中(追加)

command 2> filename                       把标准错误重定向到filename文件中(覆盖)
command 2>> filename                     把标准输出重定向到filename文件中(追加)

command > filename 2>&1               把标准输出和标准错误一起重定向到filename文件中(覆盖)
command >> filename 2>&1             把标准输出和标准错误一起重定向到filename文件中(追加)

command < filename >filename2        把标准输入重定向到filename文件中,把标准输出重定向到filename2文件中
command 0< filename 1> filename2   把标准输入重定向到filename文件中,把标准输出重定向到filename2文件中

1. 标准输入的控制
语法:命令< 文件将文件做为命令的输入。
例如:
mail -s “mail test” wesongzhou@hotmail.com < file1 将文件file1 当做信件的内容,主
题名称为mail test,送给收信人。
2. 标准输出的控制
语法:命令> 文件将命令的执行结果送至指定的文件中。
例如:
ls -l > list 将执行“ls -l” 命令的结果写入文件list 中。
语法:命令>! 文件将命令的执行结果送至指定的文件中,若文件已经存在,则覆盖。
例如:
ls -lg >! list 将执行“ls - lg” 命令的结果覆盖写入文件list 中。
语法:命令>& 文件将命令执行时屏幕上所产生的任何信息写入指定的文件中。
例如:
cc file1.c >& error 将编译file1.c 文件时所产生的任何信息写入文件error 中。
语法:命令>> 文件将命令执行的结果附加到指定的文件中。
例如:
ls - lag >> list 将执行“ls - lag” 命令的结果附加到文件list 中。
语法:命令>>& 文件将命令执行时屏幕上所产生的任何信息附加到指定的文件中。
例如:
cc file2.c >>& error 将编译file2.c 文件时屏幕所产生的任何信息附加到文件error 中。

Shell 中的文件描述符重定向是控制输入和输出的重要机制,其中 `2&gt;&amp;1` 是一个常见的用例,用于将标准错误(文件描述符 2)重定向到与标准输出(文件描述符 1)相同的位置。 ### 文件描述符的基本概念 在 Shell 中,默认有三个文件描述符: - **0**:标准输入(stdin) - **1**:标准输出(stdout) - **2**:标准错误(stderr) 通常情况下,命令的标准输出和标准错误都会打印到终端。通过重定向,可以将它们发送到文件、设备或其他命令中。 ### `2&gt;&amp;1` 的含义 `2&gt;&amp;1` 表示将标准错误(文件描述符 2)重定向到当前标准输出(文件描述符 1)所指向的位置。这意味着标准错误的内容会与标准输出的内容一起被处理。 例如,在命令 `command &gt; file 2&gt;&amp;1` 中,标准输出先被重定向到 `file`,然后标准错误也被重定向到同一文件。这样,`file` 中将同时包含命令的正常输出和错误信息[^1]。 ### 使用方法 #### 基本语法 ```bash command &gt; file 2&gt;&amp;1 ``` 上述命令的执行顺序如下: 1. `&gt; file` 将标准输出(文件描述符 1)重定向到文件 `file`。 2. `2&gt;&amp;1` 将标准错误(文件描述符 2)复制到文件描述符 1 所指向的位置,即同样写入 `file`。 #### 注意顺序 如果命令写作 `command 2&gt;&amp;1 &gt; file`,则行为不同。在这种情况下,`2&gt;&amp;1` 先执行,此时标准输出尚未被重定向,因此标准错误仍然指向终端;随后 `&gt; file` 将标准输出重定向到文件,但标准错误不会受到影响。 #### 示例代码 以下是一个实际使用 `2&gt;&amp;1` 的 Bash 脚本示例: ```bash #!/bin/bash # 将标准输出和标准错误都写入 output.log echo &quot;Starting command...&quot; &gt; output.log 2&gt;&amp;1 some_command &gt;&gt; output.log 2&gt;&amp;1 ``` 在这个脚本中,所有输出(包括正常输出和错误信息)都会被追加到 `output.log` 文件中。 ### 应用场景 - **日志记录**:将程序的输出和错误统一记录到日志文件中,便于调试和监控。 - **后台运行**:结合 `nohup` 或 `&amp;` 使用时,防止输出内容丢失。 - **自动化脚本**:确保脚本运行时不会向用户终端输出无关信息。 ### 错误重定向到 `/dev/null` 如果希望忽略所有错误信息,可以将标准错误重定向到 `/dev/null`: ```bash command &gt; /dev/null 2&gt;&amp;1 ``` 这表示将标准输出和标准错误都丢弃,不产生任何输出[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值