Como ler do usuário na linha de leitura while-loo

Eu tinha um arquivo bash que solicitava ao usuário alguns parâmetros e usava padrões se nada fosse dado. O script passou a executar outros comandos com os parâmetros. Isso funcionou muito bem - sem problemas até a adição mais recente.

Em uma tentativa de ler o parâmetro NAMES de um arquivo txt, adicionei um loop while para incluir os nomes no arquivo, mas ainda gostaria que os parâmetros restantes fossem solicitado

Mas depois que adicionei o loop while, a saída mostra o prompt impresso em get_ans () e nunca faz uma pausa para uma leitura, portanto todos os padrões são selecionado

Gostaria de ler o primeiro parâmetro de um arquivo e, em seguida, todos os arquivos subsequentes solicitando ao usuári

O que eu quebrei adicionando o loop while?

cat list.txt | 
while read line
do 
  get_ans "Name" "$line"
  read NAME < $tmp_file

  get_ans "Name" "$line"
  read NAME < $tmp_file
done

function get_ans
{
  if [ -f $tmp_file ]; then
    rm $tmp_file

  PROMPT=$1
  DEFAULT=$2

  echo -n "$PROMPT [$DEFAULT]: "
  read ans
  if [ -z "$ans" ]; then
    ans="$DEFAULT"
  fi
  echo "$ans" > $tmp_file
}

(NOTA: O código não é copiado e colado; portanto, desculpe erros de digitação. O código real tem a função definida antes do main ())