格式:
exec 文件描述符[n] <或> file或文件描述符或设备
在上面讲的输入,输出重定向 将输入,输出绑定文件或设备后。只对当前那条指令是有效的。如果需要在绑定之后,接下来的所有命令都支持的话。就需要用exec命令
实例:
12
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[[email protected]
shell]$exec
6>&1
#将标准输出与fd
6绑定
[[email protected]
shell]$ls
/proc/self/fd/
0
1 2 3 6
#出现文件描述符6
[[email protected]
shell]$exec
1>suc.txt
#将接下来所有命令标准输出,绑定到suc.txt文件(输出到该文件)
[[email protected]
shell]$ls
-al
#执行命令,发现什么都不返回了,因为标准输出已经输出到suc.txt文件了
[[email protected]
shell]$exec
1>&6
#恢复标准输出
[[email protected]
shell]$exec
6>&-
#关闭fd
6描述符
[[email protected]
~]$ls
/proc/self/fd/
0
1 2 3说明:使用前先将标准输入保存到文件描述符6,这里说明下,文件描述符默认会打开0,1,2 还可以使用自定义描述符 。然后对标准输出绑定到文件,接下来所有输出都会发生到文件。 使用完后,恢复标准的输出,关闭打开文件描述符6。
有趣事情:
可能有朋友会这样用:exec 1>suc.txt ,接下来所有输出都绑定到suc.txt 文件,那么怎么样恢复原来的呢? 试试你就会发现问题所在……
- 复杂一点实例
12
3
4
5
6
7
8
9
10
11
exec
3<>
test
.sh;
#打开test.sh可读写操作,与文件描述符3绑定
while
read
line<&3
do
echo
$line;
done
#循环读取文件描述符3(读取的是test.sh内容)
exec
3>&-
exec
3<&-
#关闭文件的,输入,输出绑定
- 总结下:
学习就要总结,总结才可以提高了。哈哈!
估计还有一些朋友是头晕晕的。怎么linux的重定向这么复杂呢,又是文件打开描述符又是读,还有些,还有默认标准输入输出。
其实,总结一下,重定向应用通常就以下两点:
1、重新设置命令的默认输入,输出,指向到自己文件(文件,文件描述符,设备其实都是文件,因为linux就是基于设备也是文件,描述符也指向是文件,哈哈)
2、扩展自己新的描述符,对文件进行读写操作