shell文件描述符与重定向

2019-08-18  本文已影响0人  迷鹿milu

文件描述符与重定向

1 文件描述

linux 中:当一个命令发生错误并回退时,它会返回一个非0的退出状态;而当命令成功完成后,它会返回为0的退出状态。
退出状态可以从特殊变量?中获得(在命令结束后立即运行echo? 可以打印出退出状态)。

系统描述符 对应输出 描述
0 stdin 标准输入
1 stdout 标准输出
2 stderr 标准错误

1.1 文件描述的输出

  1. 错误示范:(输出到屏幕)
ls + > out.txt
  1. 正确示范:(指明输出状态)
ls + 2> out.txt
  1. 重定向输出到两个文件:
cmd 2>stderr.txt 1>stdoout.txt
  1. 同时输出到同一个文件:
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
上一篇下一篇

猜你喜欢

热点阅读