bash while循环从文件读取并要求用户输入

时间:2014-11-05 15:46:55

标签: bash

我需要从文件中读取行。通常通过stdin发送文件,但如果我还需要用户输入,我不能!

这是一个(人为的)例子:

#!/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: 

$

我怎么能在同一个循环中做到这两个?

1 个答案:

答案 0 :(得分: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

(显式-rIFS的清除对于读取内容而不修剪尾随空格,扩展反斜杠转义等是必要的;除非您明确知道,否则默认使用它们是一个好习惯你想要这些行为。)