Поддерживает ли bash выполнение чтения, вложенного в цикл чтения?

Команда чтения bash очень удобна для:

  • прочитайте -p, чтобы запросить пользователя и получить вход от пользователя.
  • while прочитать цикл для итерации по строкам файла.

Однако у меня возникают проблемы с одновременным выполнением.

Например:

#!/bin/bash

while read item
do

    echo Item: $item

    read -p "choose wisely: " choice

    echo You still have made a $choice.

done < /tmp/item.list 

Вместо того, чтобы блокировать и стоять для пользователя, чтобы ввести выбор, bash заполняет $choice следующим элементом в файле item.list.

Поддерживает ли bash выполнение чтения, вложенного в цикл чтения?

Ответы

Ответ 1

Самое простое исправление заключается в том, чтобы внешний read читать из другого файла вместо стандартного ввода. В Bash параметр -u позволяет сделать немного легче.

while read -u 3 item
do
  # other stuff
  read -p "choose wisely: " choice
  # other stuff
done 3< /tmp/item.list