2011-02-10 160 views
1

我有一个shell脚本 -如何逐行阅读并从键盘获取输入?

while read -r line; 
do 
echo $line 
done < file.txt 

这是工作正常,但我需要从文件中读取每一行后提示用户进行输入。 我试着添加“阅读”,但这是行不通的。

while read -r line; 
do 
echo $line 
#prompt user here 
read input_user 
done < file.txt 

有什么想法?我也愿意使用awk。

+0

感谢guys..your答案工作正常..现在我很困惑哪一个选择(滴答)答案:D .. – 2011-02-10 05:41:22

回答

3

对循环的read使用不同的FD。

while read -u 4 -r line 
do 
    echo $line 
    #prompt user here 
    read input_user 
done 4< file.txt 
3

可以使用-u选项read指定的文件句柄:

while read -u 9 -r line; do 
    echo $line 
    read -p 'Press ENTER ' input_user 
done 9<file.txt 

-u 99<file.txt结合意味着,在while循环读取和“常规” read报表还是来了来自标准输入。

您通常可以选择任何文件句柄尚未使用 - 0,12分别是标准输入,输出和错误。我倾向于从9开始,根据需要一路下调,具体取决于我需要一次访问多少个文件句柄。

样品成绩单:

pax$ ./qq.sh 
line 1 
Press ENTER <ENTER pressed> 
line 2 
Press ENTER <ENTER pressed> 
line 3 
Press ENTER <ENTER pressed> 
line 4 
Press ENTER <ENTER pressed> 
pax$ _ 
1

如果你真的是键盘

while read -r line; do 
    echo $line 
    #prompt user here 
    read input_user </dev/tty 
done <file.txt 

将从连接终端读取无论任何改向。