重定向命令

示例:
$ cat food 2>&1 >file
cat: can't open food
$ cat food >file 2>&1
为什么只有第二个命令才能把标准输出(stdout)和标准错误(stderr)重定向到文件file中?
在第一个命令中,shell里首先是2>&1,意味着标准错误重定向到与标准输出同样的地方。这无任何效果,因为两部分都重定向到屏幕上(省缺)。然后>file重定向标准输出到file,但标准错误仍然定向到终端。
在第二个命令中,shell里首先是>file,意味着标准输出重定向到file。然后 2>&1将标准错误重定向到与标准输出同样的地方,即file。这也是我们想要的。

其它常用重定向的命令
command > filename 把标准输出重定向到一个新文件中
command >> filename 把标准输出重定向到一个文件中(追加)
command 1 > fielname 把标准输出重定向到一个文件中
command 1 >> fielname 把标准输出重定向到一个文件中(追加)
command 2 > filename 把标准错误重定向到一个文件中
command 2 >> filename 把标准错误重定向到一个文件中(追加)
command < filename 把filename文件作为标准输入
command << delimiter 从标准输入中读入,直至遇到delimiter分界符
command <&m 把把文件描述符m作为标准输入
command >&m 把把标准输出重定向到文件描述符m中
command <&- 关闭标准输入

背景知识:
我们在shell中执行命令的时候,每个进程都和三个打开的文件相联系,并使用文件描述符来引用这些文件。由于文件描述符不容易记忆,shell同时也给出了相应的文件名。下面就是这些文件描述符及它们通常所对应的文件名:
输入文件—标准输入    0    缺省是键盘
输出文件—标准输出    1    缺省是屏幕
错误输出文件—标准错误  2    缺省是屏幕
### Linux 输出重定向命令使用指南 Linux 系统中的输出重定向是一种强大的工具,允许用户将命令的标准输出(stdout)、标准错误(stderr)以及二者的组合保存到文件中或进行其他处理。以下是关于输出重定向的详细说明和示例: #### 1. 基本符号与功能 - **`>`**:覆盖文件内容,将标准输出写入文件。如果文件不存在,则创建新文件;如果文件已存在,则覆盖原有内容。 ```bash ls > output.txt # 将 `ls` 命令的输出保存到 output.txt 中[^3] ``` - **`>>`**:追加模式,将标准输出添加到文件末尾而不覆盖原有内容。 ```bash echo "New line" >> output.txt # 向 output.txt 文件追加一行文本[^3] ``` - **`2>`**:将标准错误重定向到文件。适用于捕获命令执行时产生的错误信息。 ```bash cat non_existent_file 2> error.log # 将错误信息保存到 error.log 文件中[^4] ``` - **`2>>`**:以追加模式将标准错误写入文件。 ```bash command 2>> error.log # 将错误信息追加到 error.log 文件中 ``` - **`&>`**:同时将标准输出和标准错误重定向到同一个文件。 ```bash ls -l &> combined.log # 将正常输出和错误信息都保存到 combined.log 文件中[^3] ``` - **`&>>`**:以追加模式同时将标准输出和标准错误写入同一个文件。 ```bash command &>> combined.log # 将正常输出和错误信息追加到 combined.log 文件中 ``` #### 2. 示例代码 以下是一些常见场景下的输出重定向示例: ```bash # 示例 1: 将 `ls` 命令的输出保存到文件中 ls > directory_list.txt # 覆盖模式保存输出[^3] # 示例 2: 追加输出到现有文件 echo "Additional information" >> directory_list.txt # 追加模式[^3] # 示例 3: 捕获错误信息 grep "pattern" non_existent_file 2> grep_error.log # 捕获 `grep` 的错误信息[^4] # 示例 4: 同时保存标准输出和标准错误 find / -name "config*" &> search_results.log # 保存所有输出和错误信息[^3] # 示例 5: 使用追加模式保存所有输出 find / -name "log*" &>> search_results.log # 追加保存所有输出和错误信息 ``` #### 3. 注意事项 - 如果需要同时查看输出并保存到文件中,可以结合 `tee` 命令使用: ```bash ls | tee output.txt # 将输出同时显示在屏幕上并保存到文件中 ``` - 默认情况下,重定向操作针对的是标准输出(stdout)。若需指定标准错误(stderr),必须明确使用 `2>` 或 `2>>` 符号。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值