ksh игнорирует ровно два символа новой строки при чтении из / dev / tty - PullRequest
0 голосов
/ 01 ноября 2011

У нас есть скрипт ksh, который читает из строки 'while read' с введенным в нее вводом.В то же время мы читаем вводимые пользователем подтверждения с «read </ dev / tty», аналогично следующему эскизу: </p>

cat interestingdata | while read line ; do
    x=$(dostuff $line)
    if [[ x -ne 0 ]] ; then
        read y < /dev/tty
        $(domorestuff $y)
    fi
    echo "done optional stuff"
done

Все отлично работает для обработки строк интереса и длябольшая часть чтения из / dev / tty.Однако на первых двух итерациях цикла while первая строка + символ новой строки игнорируются.

Под этим я подразумеваю, что пользователь что-то печатает и нажимает клавишу ввода, и сценарий не переходит к отображению «готовых необязательных вещей».Вместо этого пользователь должен ввести что-то еще и снова нажать клавишу ввода, и только после этого скрипт продолжится.

Это происходит только для первых двух итераций цикла while, и тогда все работает отлично.Есть идеи, как я могу это исправить?Я понятия не имею, что еще я могу сделать здесь!

Запуск ядра Linux 2.6.9-55.9.vm2.ELsmp с ksh93, если это поможет.

1 Ответ

0 голосов
/ 26 ноября 2011

Звучит так, будто "dostuff" или "domorestuff" иногда читают со стандартного ввода.

Попробуйте заменить "dostuff" на "dostuff </ dev / null" и "domorestuff" на "domorestuff </ dev/ null "и посмотреть, если поведение изменится. </p>

...