2012-03-11 78 views
3

我正在处理一个脚本,该脚本从csv文件中提取数据,操作数据,然后询问用户更改是否正确。问题是你似乎无法在正在读取文件的while循环中执行读命令。测试脚本包含在下面,注意一个in文件需要被创建,只要它没有被真正使用。这只是我正在研究的更大脚本的摘录。我重新编码它使用似乎工作的数组,但想知道是否有任何解决方法?我一直在阅读几个bash指南,并阅读手册页,并没有找到答案。提前致谢。Bash在读取文件的循环内读取

#!/bin/bash 
######### 
file="./in.csv" 
OLDIFS=$IFS 
IFS="," 
######### 

while read custdir custuser 
do 
    echo "Reading within the loop" 
    read what 
    echo $what 
done < $file 

IFS=$OLDIFS 
+0

您可能会发现'awk'成为你试图做一个更好的选择。 – 2012-03-11 01:52:38

回答

7

您可以摆弄文件句柄,以便您仍然可以访问旧的标准输入。例如,该文件qq.sh将读取本身和使用read循环打印每行,也问你一个问题,每行后:

while read line 
do 
    echo " Reading within the loop: [$line]" 
    echo -n " What do you want to say? " 
    read -u 3 something 
    echo " You input: [$something]" 
done 3<&0 <qq.sh 

它通过先保存标准输入做到这一点(文件句柄0)进入文件处理3与3<&0,然后使用read -u <filehandle>变种从文件句柄3.一个简单的成绩单为:

pax> ./qq.sh 
    Reading within the loop: [while read line] 
    What do you want to say? a 
    You input: [a] 
    Reading within the loop: [do] 
    What do you want to say? b 
    You input: [b] 
    Reading within the loop: [echo "Reading within the loop: [$line]"] 
    What do you want to say? c 
    You input: [c] 
    Reading within the loop: [echo -n "What do you want to say? "] 
    What do you want to say? d 
    You input: [d] 
    Reading within the loop: [read -u 3 something] 
    What do you want to say? e 
    You input: [e] 
    Reading within the loop: [echo "You input: [$something]"] 
    What do you want to say? f 
    You input: [f] 
    Reading within the loop: [done 3<&0 <qq.sh] 
    What do you want to say? g 
    You input: [g] 
    Reading within the loop: [] 
    What do you want to say? h 
    You input: [h] 
pax> _ 
+0

谢谢,我正要问,如何修复它。这对小测试脚本起作用,现在将其纳入实际脚本中。再次感谢。 – SoulNothing 2012-03-11 02:14:28