##将标准输入重定向到一个文件描述符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
转载于:https://blog.51cto.com/muahao/1531888