文章目录
  1. 1. 基本概念
  2. 2. 重定向

基本概念

文件描述符是与文件输入相关联的整数
0 - - - stdin 标准输入
1 - - - stdout 标准输出
2 - - - stdout 标准错误

command > filename 把command的标准输出重定向到文件中 (先清空文件,再写入)
command >> filename 把command的标准输出重定向到文件中 (以追加的方式写)

当使用重定向操作符时,被重定向的内容不会出现在屏幕上
重定向操作符默认使用标准输出, 如果需要使用特定的文件描述符, 则需要将该描述符置于操作符前面。

> 等同于 1> , >> 等同于 1>>

重定向

命令一般会把错误信息输出到标准错误中,例如给ls命令传入一个错误的参数+,将提示错误信息

下面的命令将标准错误输出到屏幕中,而没有输出到文件中,是因为标准>默认使用标准输出,而错误信息是通过标准错误输出的.

1
2
$ ls + > out.txt
ls: cannot access +: No such file or directory

使用2> 将标准错误重定向到文件中,没有输出到屏幕上

1
2
3
$ ls + 2> out.txt
$ cat out.txt
ls: cannot access +: No such file or directory

将stderr重定向到一个文件,将stdout重定向到另一个文件
$cmd 2> stderr.txt 1> stdout.txt

将stderr转换为stdout,使得stderr和stdout都被重定向到一个文件

1
2
cmd 2>&1 output.txt
cmd output.txt 2>&1

测试:
准备3个测试文件, a1,a2,a3, 其中a1没有rwx权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
echo a1 > a1
cp a1 a2
cp a2 a3
chmod 000 a1
因为a1没有可读权限,所有cat a1的时候会打印错误信息
$ cat a*
cat: a1: Permission denied
a1
a1
$ cat a* 2> stderr.txt
a1
a1
cat stderr.txt
cat: a1: Permission denied

当对stderr stdout重定向时, 被重定向的内容输出到文件中后就不能通过管道符|传递给后面的命令
但是可以通过tee来实现这个功能,tee接收stdin的同时还可以输出到stdout,传递给后续命令

1
2
3
4
$ cat a* | tee out.txt | cat -n
cat: a1: Permission denied
1 a1
2 a1

也可以使用/dev/stderr /dev/stdout / dev/stdin 表示标准错误,标准输出,标准输入

将文件重定向到命令:
cmd < file

文章目录
  1. 1. 基本概念
  2. 2. 重定向