- 论坛徽章:
- 0
|
但是《高级Bash脚本编程指南》怎么是这样写的?
-----------------------------------------------------------------------------------
16.1. 使用exec
--------------
exec <filename 命令会将stdin 重定向到文件中. 从这句开始, 后边的输入就都来自于这个文
件了, 而不是标准输入了(通常都是键盘输入). 这样就提供了一种按行读取文件的方法, 并且
可以使用 sed 和/或 awk 来对每一行进行分析.
Example 16-1 使用exec 重定向标准输入
################################Start
Script#######################################
1 #!/bin/bash
2 # 使用'exec'重定向标准输入.
3
4
5 exec 6<&0 # 将文件描述符#6 与stdin 链接起来.
6 # 保存了stdin.
7
8 exec < data-file # stdin 被文件"data-file"所代替.
9
10 read a1 # 读取文件"data-file"的第一行.
11 read a2 # 读取文件"data-file"的第二行.
12
13 echo
14 echo "Following lines read from file."
15 echo "-------------------------------"
16 echo $a1
17 echo $a2
18
19 echo; echo; echo
20
21 exec 0<&6 6<&-
22 # 现在将stdin 从fd #6 中恢复, 因为刚才我们把stdin 重定向到#6 了,
23 #+ 然后关闭fd #6 ( 6<&- ), 好让这个描述符继续被其他进程所使用.
24 #
25 # <&6 6<&- 这么做也可以.
26
27 echo -n "Enter data "
28 read b1 # 现在"read"已经恢复正常了, 就是从stdin 中读取.
29 echo "Input read from stdin."
30 echo "----------------------"
31 echo "b1 = $b1"
32
33 echo
34
35 exit 0
################################End
Script#########################################
同样的, exec >filename 命令将会把stdout 重定向到一个指定的文件中. 这样所有的命令输
出就都会发向那个指定的文件, 而不是stdout. |
|