Bash: читать внутри цикла while - PullRequest
1 голос
/ 02 марта 2012

Позвольте представить вам мой цикл:

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 same
$ ORIGINAL также
$ NODES - это абсолютный путь к файлу, который содержит много строк, таких как:
| 23127 myserver 98.194.263.29 |

Проблема:


echo внутри оператора else правильно сработал. Но этого не происходит с оператором read

Есть предложения?

1 Ответ

3 голосов
/ 02 марта 2012

Причина, по которой цикл не работает должным образом, заключается в том, что read читает из стандартного ввода в обоих случаях. Вам необходимо открыть альтернативный файловый дескриптор для вашего файла и прочитать из файлового дескриптора.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...