2014-11-05 41 views
0

我需要读取文件中的行。通常通过stdin发送文件,但如果我还需要做用户输入,我不能!bash while循环从文件中读取并要求用户输入

这里的(人为)例如:

#!/usr/bin/env bash 

cat <<HERE >/tmp/mytemp.txt 
four of clubs 
two of hearts 
queen of spades 
HERE 

while read line ; do 
    echo "CARD: $line" 
    read -p 'Is that your card? ' answer 
    echo "YOUR ANSWER: $answer" 
    echo 
done </tmp/mytemp.txt 

这是行不通的。相反,你得到这个:

$ ~/bin/sample_script.sh 
LINE: four of clubs 
MY ANSWER: two of hearts 

LINE: queen of spades 
MY ANSWER: 

$ 

我该怎么做在同一个循环?

回答

3

使用两个不同的文件描述符。

while IFS= read -r -u 3 from_file; do 
    read -r from_user 
    # ...your logic here... 
done 3< filename 

或者,不依赖于任何bash的扩展:

while IFS= read -r from_file <&3; do 
    read -r from_user 
done 3< filename 

(显式-r和清算的IFS是必要的,而不修整尾随空格阅读内容,扩大反斜杠,等等;它们的使用除非你明确知道你想要这些行为,否则默认是一个好习惯)。