2013-04-30 10 views
15

bashは、コマンドがにとって非常に便利である読み取る:bashは読み取りループ内でネストされた読み取りをサポートしていますか?

  • をユーザに促すと、ファイルの行を反復処理するループを読みながらユーザ
  • からの入力をキャプチャするために -pを読み取ります。

ただし、両方を同時に実行しようとする問題があります。例えば

#!/bin/bash 

while read item 
do 

    echo Item: $item 

    read -p "choose wisely: " choice 

    echo You still have made a $choice. 

done < /tmp/item.list 

むしろbashはitem.listファイル内の次の項目で$選択肢を移入され、ブロックと選択肢を入力するようにユーザのために待機より。

読み取りループ内でネストされた読み取りを実行するbashサポートはありますか?

+1

注意しなければならないことは、1)内側ループが外部ループからファイル記述子を継承し、2)標準入力以外のファイル記述子を使用できることです。 – chepner

+0

[bash:ネストされたインタラクティブな読み込みも可能なループ内で読み込み](http://stackoverflow.com/questions/11704353/bash-nested-interactive-read-within-a-loop-thats-also-using -読む) – Sparhawk

答えて

25

最も簡単な解決策は、外側のreadを標準入力の代わりに別のファイル から読み込むことです。 Bashでは、-uオプションを使用すると、 が少し楽になります。

while read -u 3 item 
do 
    # other stuff 
    read -p "choose wisely: " choice 
    # other stuff 
done 3< /tmp/item.list 
関連する問題