请教关于使用文件描述符问题 (exec 和重定向)

请教关于使用文件描述符问题 (exec 和重定向)

我在一本书看到下面的例子,是通过使用文件描述符来打开和关闭一个文件。
这里4作为文件描述符,不理解exec 4<&0 0<stock.txt 。
引用:
#!/bin/sh
exec 4<&0 0<stock.txt
read line1
read line2
exec 0<&4
echo $line1
echo $line2
      
用于 redirection 的这种 exec 用法在软件包的 configure 脚本中很常见
--
exec 4<&0 0< stock.txt 执行了两个「动作」: 首先, 把文件描述符 0 (标准输入 stdin, 一般指键盘) 复制 (duplicate) 到描述符 4 (效果上是把 0 做了个备份), 然后, 用描述符 0 打开 stock.txt. 这个时候 stdin 就从 stock.txt 读数据了, 因此后面的 read 就是读 stock.txt.
--
exec 0<&4 把前面备份的描述符 4 复制回 0, 其实就是恢复了从键盘读数据

      
后面的 exec 0<&4 换成 exec 0<&4- 可能更好些, 这不但恢复了 stdin, 而且还把临时使用的描述符 4 给 close 掉了      
引用:
原帖由 dearvoid 于 2008-10-31 13:35 发表
用于 redirection 的这种 exec 用法在软件包的 configure 脚本中很常见
--
exec 4
版主不愧是版主!实在是佩服!以后向你学习!

      
引用:
原帖由 skyblue1 于 2008-10-31 14:59 发表
版主不愧是版主!实在是佩服!以后向你学习!
互相学习, 共同进步