我需要从文件中读取行。通常通过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:
$
我怎么能在同一个循环中做到这两个?
答案 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
(显式-r
和IFS
的清除对于读取内容而不修剪尾随空格,扩展反斜杠转义等是必要的;除非您明确知道,否则默认使用它们是一个好习惯你想要这些行为。)