通过使用文件描述符来打开和关闭一个文件。

这里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, 其实就是恢复了从键盘读数据

 

这问题搞了一下午,纠结的蛋疼,不就是文件句柄嘛,shell非要整个由无符号整数,像perl弄个可以含有字母的多好。o(︶︿︶)o 唉 还是我没理解文件描述符