2014-11-05 39 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是必要的,而不修整尾隨空格閱讀內容,擴大反斜槓,等等;它們的使用除非你明確知道你想要這些行爲,否則默認是一個好習慣)。