2013-04-30 89 views
15

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文件的下一個項目。

慶典是否支持做嵌套在讀取循環中讀?

+1

要記住的兩件事是1)內循環從外循環中繼承其文件描述符,2)可以使用其他文件描述符而不是標準輸入。的 – chepner 2013-04-30 20:44:54

+0

可能重複[bash的:這也是使用讀出的環路內嵌套交互式讀取](http://stackoverflow.com/questions/11704353/bash-nested-interactive-read-within-a-loop-thats-also-using -讀) – Sparhawk 2014-07-30 07:03:53

回答

25

最簡單的解決方法是讓外部read從不同的文件 中讀取而不是標準輸入。在bash中-u選項使之成爲 更容易一些。

while read -u 3 item 
do 
    # other stuff 
    read -p "choose wisely: " choice 
    # other stuff 
done 3< /tmp/item.list