文件描述符与重定向
1 文件描述
linux 中:当一个命令发生错误并回退时,它会返回一个非0的退出状态;而当命令成功完成后,它会返回为0的退出状态。
退出状态可以从特殊变量? 可以打印出退出状态)。
系统描述符 | 对应输出 | 描述 |
---|---|---|
0 | stdin | 标准输入 |
1 | stdout | 标准输出 |
2 | stderr | 标准错误 |
1.1 文件描述的输出
- 错误示范:(输出到屏幕)
ls + > out.txt
- 正确示范:(指明输出状态)
ls + 2> out.txt
- 重定向输出到两个文件:
cmd 2>stderr.txt 1>stdoout.txt
- 同时输出到同一个文件:
cmd 2>&1 alloutput.txt
cmd &> output.txt
1.2 实例:
创建测试文件:
echo A1 > a1
echo A2 > a2
echo A3 > a3
chmod 000 a1 // 清除 a1 所有权限
使用通配符 a* 查看所有文件:
cat a* 2> err.txt
cat : a1 permission denied
A2
A3
cat err.txt
cat : a1 permission denied
cat -n 为从 stdin 中接收到的每一行数据前加上行号并将其写入 stdout:
cat a* | tee out.txt | cat -n
cat: a1: Permission denied
1 A2
2 A3
要发送输入内容的两份副本给 stdout,使用 - 作为命令的文件名参数即可:
echo who is this | tee -
who is this
who is this
2 自定义描述符
2.1 exec 命令创建全新的文件描述符。
描述符的常用打开模式有三种:
只读模式
追加写入模式
截断写入模式
<
操作符可以将文件读入stdin
>
操作符用于截断模式的文件写入(数据在目标文件内容被截断后写入)
>>
操作符用于追加模式的文件写入
>
等同于 1>
>>
等同于 1>>
2.2 只读模式
创建描述符:
exec 3<input.txt //使用文件描述符 3 打开并读取文件
使用:
echo this is a test line > input.txt
exec 3<input.txt
cat <&3
this is a test line
2.3 截断模式
创建描述符:
exec 4>output.txt
echo newline >&4
cat outpute.txt
newline
2.4 追加模式
追加模式:
exec 5>>input.txt
echo appended line >&5
cat input.txt
newline
appended line