Интерактивный скрипт; Подскажите внутри цикла

1687
Chris

Как мне предложить пользователю ввести данные из сценария оболочки (ksh) в цикле, в котором читается файл?

Скрипт читает в файл. В каждом проходе цикла пользователю будет предложено отменить его или нет? Функция отлично работает вне цикла. Внутри цикла переменная заполняется строкой файла. Скрипт не останавливается для взаимодействия.

Есть идеи?

Сценарий:

###################################################### func_yesno(){ echo "cancel y/n?" read answer echo Your answer: $answer case $answer in y*|Y*) exit 0 ;; n*|N*) echo ok ;; *) echo wrong! ;; esac }  func_yesno  while read line do echo line: $line func_yesno done < /tmp/in.txt  func_yesno ###################################################### 

Входной файл в .txt:

Koeln Aachen Muenchen Hamburg Berlin 

Выход:

# /tmp/a.sh cancel y/n? n Your answer: n ok line: Koeln cancel y/n? Your answer: Aachen wrong! line: Muenchen cancel y/n? Your answer: Hamburg wrong! line: Berlin cancel y/n? Your answer: wrong! cancel y/n? n Your answer: n ok 
1

1 ответ на вопрос

-1
glenn jackman

The function's read command is using the same stdin as the while loop's read. Use a different file descriptor. Also, the function can be simpler:

func_yesno() { typeset answer PS3="Cancel (y/n)?" select answer in Yes No; do case $answer in Yes) exit 0 ;; No) echo "ok"; break ;; esac done } while read -u3 line; do echo "line: $line" func_yesno done 3< unique.txt 
Да, в этом нет ничего плохого. MariusMatutiae 9 лет назад 0
Нет необходимости вкладывать два цикла while. MariusMatutiae 9 лет назад 0
Пожалуйста, добавьте ваши комментарии к моим комментариям, невозможно следить за беседой в 2 местах. glenn jackman 9 лет назад 0