##将标准输入重定向到一个文件描述符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