Соответствующие части кода еще не завершены, но на основе комментариев я собираюсь догадаться, что ваш цикл while выглядит так:
while read -r ... ; do
# do stuff ...
# read user input
read -r var
done < file
Из этого сразу же становится очевидной проблема: внутренняя read
получает свой ввод из того же места, что и внешний цикл, а именно из stdin, который был перенаправлен с file
, а не от пользователя.Для немного более переносимой альтернативы, которая не зависит от поддержки на уровне ядра /dev/tty
, просто используйте другой дескриптор файла, отличный от stdin, для цикла while.
while read -r ... <&9; do
# loop stuff
# stdin still attached to the terminal untouched,
# so this reads from the terminal as expected
read -r var
done 9< file
Обратите внимание, что в этом примере используется fd 9для файла, оставив fd 0 (stdin) в покое.Посмотрите на BashFAQ 089 для более подробной информации.