2015-11-19 127 views
1

如下所示,第一個循環的目標是從文本文件中讀取步驟,而第二個循環旨在根據用戶在屏幕上看到的內容接受來自用戶的選項,並執行某些操作,比如說配置package.use或其他內容,然後繼續執行下一步,直到步驟結束。在bash中這個嵌套的while循環有什麼問題?

問題是第二個while循環既不會顯示選項也不會連續讀取文本文件中的步驟,它只是在執行第一步的步驟後退出while循環,在這種情況下,它顯示執行的結果emerge --pretend ceph並退出兩個循環。

步驟文本文件:

ceph 
jdk 
firefox 
... 

嵌套while循環:

#/bin/bash 
STEPS="./steps" 
while read -r line; 
do 
    if [[ ! $line = "#"* ]]; then 
       emerge --pretend $line 
       while read -p 'Please choose something:(1:package.use 2:package.license 3:package.keywords) ' input; 
       do 
       case $input in 
         1) echo "$input has been chosen." 
          #set up package.use 
         ;; 
         ... 
       esac 
       done 
     fi 
done <$STEPS 
+0

可能重複:[閱讀bash中輸入一個while循環(http://stackoverflow.com/questions/6883363/read-input -in-的bash-內部-A-while循環)。 –

+0

顯然,這個線程與這個線程完全不同,因爲我所要求的是一個嵌套的while循環,而且,我的情況並不是從文件或目錄中讀取的。我問的是在while循環中,還有另一個while循環用於接受用戶的選項。 –

+0

它仍然是同樣的原因和相同的效果。不要緊,另一個問題沒有嵌套的'while',重要的是它試圖從已經被重定向的'read'循環中的用戶'讀'。該問題中發佈的解決方案也適用於您的問題。 –

回答

0

的問題是您的外環重定向stdin來自您的文件,當你嘗試做一個內部循環中的read,它也讀取該文件。

見一些可能的解決以下問題:

Read input in bash inside a while loop

+0

如果您確定了重複,請爲此創建註釋。一旦你有足夠的權限,你將被允許實際投票結束一個重複的問題(它需要5票才能完成,儘管金牌會員可以自己做)。 – tripleee

+0

謝謝。我會去做。我不確定什麼是正確的協議。 –

+0

正式的文檔在這裏:http://meta.stackexchange.com/help/privileges/close-questions ...但它沒有從一個人的角度來解釋它的信譽不到3,000。也許有關於該部分的某個元問題。 – tripleee