Bashが古い場合
標準入力とは異なるファイルディスクリプタを使えば逝けるらしい。
参考: Does bash support doing a read nested within a read loop?
while read -u 9 line do read -p "Do you like ${HOGE}? [Y/n]" ANSWER . . . done 9< hoge
Bash4.0 以上の場合
組み込みコマンドの mapfile
をつかって、ファイルの中身を行ごとの配列にできる。
これを使えば、ループ内で read
できる。
参考: 本を読む bash 4.0:テキストファイルを行単位で配列に読み込む
mapfile HOGE_LIST < hoge for HOGE in "${HOGE_LIST[@]}"; do read -p "Do you like ${HOGE}? [Y/n]" ANSWER if echo "${ANSWER}" | egrep -Ei "^y.*"; then echo "Login succeeded." fi done
普通にやると……
いつものようにファイル読み込みにも普通に read
を使うと、
標準入力が爆発してループ内の read
が正しく動かない。
cat hoge | while read line do read -p "Do you like ${HOGE}? [Y/n]" ANSWER . . . done