Bash:在循环中读取内部

时间:2012-03-02 16:13:07

标签: bash while-loop

让我向大家介绍我的循环:

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 |

问题:


echo语句中的else已正确触发。 但是read语句

不会发生相同的情况

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

循环不能正常工作的原因是因为read在两种情况下都是从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