Linux 下输入/输入重定向简析
一个命令通常都会打开三个文件,默认使用文件描述符0, 1, 2来指代这个三个文件
1 2 3
| stdin 0 #标准输入流 (键盘) stdout 1 #标准输出流 (终端) stderr 2 #标准错误输出流 (终端)
|
输出重定向
command
为任意命令,file为任意文件
1 2 3 4 5
| command > file #将标注输出重定向(写入)到 file 里 command 1> file #将标准输出重定向到 file 里(与上式一致) command 2> file #将错误输出重定向到 file 里 command &> file #将标准输出与错误输出一起重定向到 file 里 command >> file #将标准输出追加到file中
|
例:标注输出至文件
1 2 3 4 5 6 7
| $ ls test1 test2 test3 $ ls > test3 $ cat test3 test1 test2 test3
|
例:错误输出至文件
1 2 3 4 5 6 7 8 9 10 11 12
| $ ls test1 test2 test3 $ cat testx cat: testx: 没有那个文件或目录 $ cat testx 2>> test3 $ cat test cat: test: 没有那个文件或目录 $ cat test3 test1 test2 test3 cat: testx: 没有那个文件或目录
|
例:标准输出与错误输出一同写入文件
1 2 3 4 5 6 7 8
| $ cat test2 $ cat testxxxx test3 &> test2 $ cat test2 cat: testxxxx: 没有那个文件或目录 test1 test2 test3 cat: testx: 没有那个文件或目录
|
输入重定向
xxx
为标签
1 2
| command < file #重定向标准输入 command << xxx #多行输入
|
例:标注输入与命令读取的异同
1 2 3 4 5 6
| $ head -v test1 ==> test1 <== 123 $ head -v < test1 ==> 标准输入 <== 123
|
可见使用标准输入时,文件名称变为了标准输入
。
例:标准输入实现多行输入
1 2 3 4 5 6 7 8 9 10 11
| $ head -v <<abc > 123 > 123 > asd > abc ==> 标准输入 <== 123 123 asd $ cat test1 123
|
以上命令中,设定 abc
为结束标签,在多行输入结束时,输入abc,即识别标签并结束输入。
参考
- https://gwaslab.com/2021/11/28/linux-redirection/