2012-03-02 4 views
1

は私はあなたのすべてに私のループをご紹介しましょうながら内部読み:バッシュ:ループ

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同じ
$原文であります
$ NODESは、多くの行を含むファイルの絶対パスです。
| 23127 myserver 98.194.263.29 |

問題:


echoそれが適切にトリガーされますelse文の中。 readステートメントでも同じことは起こりません

何か提案がありますか?

答えて

3

ループが正常に機能しないのは、どちらの場合でも読み取りがstdinから読み取られるためです。あなたはあなたのファイルに対して別のファイル記述子を開き、ファイル記述子から読み込む必要があります。代わりに、幹部3は、<$ NODES`がループする前に、あなたはまた、ループの終わりに3 <$ NODES`を行って ``使用することができます使用しての

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

+2

IMHOループが終了した後、$ NODEファイルに古い接続が残っていないので、これはややきれいです。 –