2012-03-02 37 views
1

讓我介紹我的循環,大家:擊:讀取裏面while循環

NUM_LINE=0 
while read line; do 
    let NUM_LINE+=1 
    if [ $NUM_LINE -lt 41 ]; then 
    echo -e "\t$BLANC|$ORIGINAL $line $BLANC|" 
    else 
    echo -e "\n\t$BLANC## "$GRIS"Llista de Nodes sel·leccionats $BLANC############$ORIGINAL\n" 
    read AUX 
    NUM_LINE=0 
    fi 
done <$NODES 

這樣:


$ BLANC是\033[1;37m
$ GRIS相同
$ ORIGINAL以及
$ NODES是包含很多行的文件的絕對路徑,例如:
| 23127 myserver 98.194.263.29 |

問題:


echoelse聲明它的正確觸發內。 但是它不會發生與read聲明相同

任何建議?

回答

3

循環無法正常工作的原因是因爲在兩種情況下,讀取都是從stdin讀取的。您需要爲文件打開備用文件描述符並從文件描述符中讀取。

exec 3<$NODES 
NUM_LINE=0 
while read -u 3 -r line; do 
    ((NUM_LINE++)) 
    if ((NUM_LINE < 41)); then 
    echo -e "\t$BLANC|$ORIGINAL $line $BLANC|" 
    else 
    echo -e "\n\t$BLANC## "$GRIS"Llista de Nodes sel·leccionats $BLANC############$ORIGINAL\n" 
    read AUX 
    NUM_LINE=0 
    fi 
done 
+0

有點棘手,但瑣碎的至少:(謝謝哥們! – morphynoman 2012-03-02 16:47:43

+2

而不是使用'EXEC 3 <$ NODES'循環之前,你也可以使用'做3 <$ NODES'在循環結束。恕我直言,這是稍微清潔,因爲它不會在循環結束後留下$ NODE文件的陳舊連接。 – 2012-03-02 22:16:36