转自:http://bbs.chinaunix.net/viewthread.php?tid=769040&extra=&page=1
Q:下面的代码为何只执行了一次就退出了?
- seq 10 >file
- while read a
- do
- echo $a
- dd &>/dev/null
- done <file
A:因为重定向是针对整个while循环块的,而不只是read命令,read从输入读取了一行内容后,
其它的程序(比如 rsh或sed)从同样的地方把其它的输入读走了,read当然读不到其它内容了,
while也就结束了
修改成以下代码即可
exec 3<urfile
while read var <&3
do
....
done
原来的情况是 FD1 ===>read FD1 ===>sed
后来的情况是 FD3 ===>read FD1 ===>sed