Linux 输入/输出重定向


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 #将当前目录展示输出到test3文件中
$ cat test3 #查看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 #追加错误输出至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 #head -v展示文件内容以及文件名称
==> 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,即识别标签并结束输入。

参考

  1. https://gwaslab.com/2021/11/28/linux-redirection/

评论