1

Как мне предложить пользователю ввести данные из сценария оболочки (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

Функция - й команда read использует тот же самый , как read стандартного ввод времени цикла в. Используйте другой файловый дескриптор. Также функция может быть проще:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .