Linux命令如何输入输出重定向、追加
作者:IT利刃出鞘
Linux中的输入输出重定向和追加是通过文件描述符来控制的,常用的重定向符号包括<、<<、>、>>、2>、2>>和>&,这些符号可以用于覆盖或追加输出到文件,也可以用于合并标准输出和错误输出
简介
本文介绍Linux中的输入输出重定向、追加。
Linux是通过文件描述符来控制输入和输出的,如下:
字段 | 描述 | 文件描述符 | 默认设备 |
---|---|---|---|
stdin | 标准输入流 | 0 | 终端(键盘) |
stdout | 标准输出流 | 1 | 终端(显示屏) |
stderr | 标准错误输出流 | 2 | 终端(显示屏) |
重定向符号
重定向符号 | 含义 | 使用方法 | 解释 |
< | 输入重定向 | command1 < file | command命令操作内容会从file文件中读取,替代了键盘输入 |
<< | 输入重定向,多行录入 | command1 << flag | 将开始标记flag和结束标记flag之间的内容作为输入 |
> | 输出重定向,覆盖式 | command > file | 将输出重定向到file |
>> | 输出重定向,追加式 | command >> file | 将输出以追加的方式重定向到file |
2> | 错误输出重定向,覆盖式 | command 2> file | 将错误输出重定向到file |
2> | 错误输出重定向,追加式 | command 2> file | 将错误输出以追加的方式重定向到file |
&> | 输出与错误输出重定向,覆盖式 | command &> file | 输出与错误输出重定向到file |
&>> | 输出与错误输出重定向,追加式 | command &>> file | 输出与错误输出以追加的方式重定向到file |
& | 合并 | command > file 2>&1 | 将标准输出写到file,标准错误也写到file。 |
输入重定向
<
目标
- 把test文件中的内容定向到tr程序中,将小写字母转换为大写字母。
命令
tr 'a-z' 'A-Z' < file1
- 重定向符号将file1里的内容放到tr程序文件下的/fd/0里进行相应的处理。
- tr命令用于转换或删除文件中的字符。
执行结果
<<
例1:展示在屏幕上
目标
- 把多行录入内容定向到tr程序中,将小写字母转换为大写字母。
命令
tr 'a-z' 'A-Z' <<EOF
- EOF可以用任意字符替换。
执行结果
例2:转换后输出到文件
输出重定向
>
>会覆盖原文件内容。
示例
1.将正常输出写入文件
./test.sh >log.txt
等价于
./test.sh 1>log.txt
2. 将错误输出写入文件
./test.sh 2>log.txt
3.将所有输出(正常和错误输出)都写入文件
./test.sh &>log.txt
>>
>>会追加到原文件的最后。
1.将正常输出写入文件
./test.sh >>log.txt
等价于
./test.sh 1>>log.txt
2. 将错误输出写入文件
./test.sh 2>>log.txt
3.将所有输出(正常和错误输出)都写入文件
./test.sh &>>log.txt
cmd >/dev/null 2>&1
- >/dev/null 2>&1 的含义是:不输出任何信息。
- 其实也就等价于:&>/dev/null
详解
- >/dev/null:表示标准输出重定向到空设备文件,也就是不输出任何信息。
- 2>&1:标准错误输出重定向和标准输出合并,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
cmd >> file 2>&1
- 把尼奥准输出和标准错误一起重定向到 file文件中(追加)。
- 其实也就等价于:&>>file
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。