##将标准输入重定向到一个文件描述符8
##exec n<&0

#!/bin/bash
exec 8<&0     #文件描述符8中,就会有标准输入0的副本
exec < hfile    #将标准输入重定向到hfile
read a          #输入会从hfile文件中读取
read b
echo "-----------"
echo $a
echo $b
echo "close FD *:"    
exec 0<&8 8<&-    #0>&8从文件描述符8,恢复到文件描述符0,8<&-关闭文件描述符8
echo "Pls,input data:"
read c
echo $c

[root@server100 test]# ./exec.sh
-----------
ni hao
mah
close FD *:
Pls,input data:
pp
pp
##将标准输出,重定向到其他的文件描述符
##exec n>&1  文件描述符n是标准输出1的副本
##exec 1>&n   从n恢复到1
##exec n>&-    关闭n文件描述符

#!/bin/bash
exec 8>&1
exec > loggg
echo "Output date command:"
date
echo "Output df command:"
df
exec 1>&8 8>&-
echo "-----------------"
echo "Output date command:"
date
echo Output df command""
df

[root@server100 test]# ./exec1.sh 
-----------------
Output date command:
Tue Jul 29 09:41:25 CST 2014
Output df command
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda8            105368864  20435316  79665108  21% /
tmpfs                  1847720       260   1847460   1% /dev/shm
##将标准输出1 错误输出2都重定向了,都保留一个副本。重定向后,1 2里面已经没有了
#!/bin/bash
exec 8>&1 9>&2
exec &> logg     #标准输出,错误输出,全部重定向到一个文件中
ls mahh
date
exec 1>&8 2>&9 8>&- 9>&-
echo "-----------------------"
echo "FD 8 FD 9 have been closed"
ls mahh
date

[root@server100 test]# ./exec2.sh 
-----------------------
FD 8 FD 9 have been closed
ls: cannot access mahh: No such file or directory
Tue Jul 29 09:43:51 CST 2014