Linux Bash系列教程(4)-文件描述符(file descriptor)与 I/O重定向(redirection)

Bash系列教程目录:

  1. Bash系列教程(10)-流程控制之 case条件判断
  2. Bash系列教程(9)-流程控制之 if条件判断
  3. Bash系列教程(8)-Bash 数组变量用法详解
  4. Bash系列教程(7)-Bash 变量高级特性
  5. Bash系列教程(6)-Bash 变量基础
  6. Bash系列教程(5)-内置命令介绍
  7. Bash系列教程(4)-文件描述符(file descriptor)与 I/O重定向(redirection)
  8. Bash系列教程(3)-命令行中多条命令组合和运行控制
  9. Bash系列教程(2)-使用历史命令扩展
  10. Bash系列教程(1)-命令行中快速输入和修改 bash (快捷键组合)

文件描述符(file descriptor)是内核用来访问文件的一个非负整数,打开现存文件或新建文件时,内核会返回一个文件描述符,读写文件也需要使用文件描述符来指定文件。
操作系统默认打开了 3个文件代码,0 标准输入(stdin),1 标准输出(stdout),2 标准错误(stderr)。
I/O重定向(redirection)是 Bash 常用的技巧,如将本应由标准输入读取的数据改为从其他文件读取,本应该在便准输出的结果输出到其他文件。

下文中我们使用 fd,n,m 表示一个文件描述符,file 表示文件名
< 表示输入重定向,如果 < 左边没有指定文件代码则默认为 0 (stdin)
> 表示输入重定向,如果 > 左边没有指定文件代码则默认为 1 (stdout)

打开文件描述符
fd<>file           :以读、写的方式打开文件,并指定文件描述符为 fd
fd<file            :使用 file 作为输入,并指定文件描述符为 fd
fd>file            :使用 file 作为输出,并指定文件描述符为 fd
fd>|file           :同 fd>file 但是会忽略 noclobber 选项,只要文件存在就会强制覆盖文件
fd>>file           :重定向追加,和 fd>file 的不同之处在于,它会将输出追加到文件末尾而不会覆盖文件
&>file             :伴随标准输入重定向,还可写为 1&>file 或 1>file 2>&1

关闭文件描述符
fd<&-              :关闭输入重定向
fd>&-              :关闭输出重定向

复制文件描述符
fdcopy<&fd         :将输入重定向文件描述符 fd 复制为 fdcopy 
fdcopy>&fd         :将输出重定向文件描述符 fd 复制为 fdcopy

举例:
1、通过文件描述符 100 读写文件 a.txt

:>a.txt
exec 100>a.txt
echo -e "A\nB\nC\nD\nE" >&100
exec 100<a.txt
cat <&100
exec 100<&- 100>&1

2、将 a.txt 的内容作为标准输入,并读取 file 中的内容再显示

#!/bin/bash
#file redirection.sh
filename='a.txt'
exec 10<&0
exec < $filename

while read
do
    echo $REPLY
done
exec 0<&10 10<&-

7 Trackbacks

  1. By Bash系列教程(5)-内置命令介绍 – 薹翮 on 2012 年 7 月 26 日 at 下午 4:58

    […] 薹翮 我悄悄地离开,在昨天;今天我又静静地到来 SEO 查询工具   « Bash系列教程(4)-文件描述符(file descriptor)与 I/O重定向(redirection) […]

  2. By Bash系列教程目录 – 薹翮 on 2012 年 7 月 26 日 at 下午 5:01

    […] Bash系列教程(4)-文件描述符(file descriptor)与 I/O重定向(redirection) […]

  3. By Bash系列教程(6)-Bash 变量高级特性 – 薹翮 on 2012 年 7 月 28 日 at 下午 2:32

    […] Bash系列教程(4)-文件描述符(file descriptor)与 I/O重定向(redirection) […]

  4. […] Bash系列教程(4)-文件描述符(file descriptor)与 I/O重定向(redirection) […]

  5. By Bash系列教程(8)-Bash 数组变量用法详解 – 薹翮 on 2012 年 7 月 28 日 at 下午 5:43

    […] Bash系列教程(4)-文件描述符(file descriptor)与 I/O重定向(redirection) […]

  6. By Bash系列教程(6)-Bash 变量基础 – 薹翮 on 2012 年 8 月 1 日 at 上午 11:33

    […] Bash系列教程(4)-文件描述符(file descriptor)与 I/O重定向(redirection) […]

  7. By Linux Bash系列教程(2)-使用历史命令扩展 – 薹翮 on 2012 年 8 月 24 日 at 下午 1:15

    […] Bash系列教程(4)-文件描述符(file descriptor)与 I/O重定向(redirection) […]

Post a Comment

Your email is never shared. Required fields are marked *

*
*