[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: вопрос к знатокам баша



Ещё можно читать по символу командой "read -N 1" в цикле.
Итоговое сообщение слепить из введенных символов.


12 октября 2013 г., 0:13 пользователь Dmitry Alexandrov <321942@gmail.com> написал:
> так вот, есть какой-то способ считывать пользовательский ввод в течение
> этих 15 секунд с сохранением результатов, если энтер жмакнуть юзер не
> успел?

На Баше как таковом, полагаю, способа нет. Если нет возможности собрать
альтернативную read’у читалку ввода из кода на Си, то могу предложить только
поиграться с терминалом:

#!/bin/bash

TIMEOUT=150 # 15 s

STTY=$(stty -g)
stty intr '' -icanon min 0 time $TIMEOUT ignbrk -brkint isig
read
echo
echo "$REPLY"
stty $STTY

У меня это работает, но что будет работать везде, гарантировать нельзя.

On Friday October 11 2013 22:43:48 dimas <dimas000@ya.ru> wrote:
> всем привет!
> хочется в одной приблуде реализовать "режим чата", суть которого в
> следующем: раз в 15, допустим, секунд проверяем наличие новых сообщений.
> в течение этого времени юзер может вводить свой текст, а по нажатию энтера
> - отправлять.
> если получили новое сообщение - сохраняем в переменной то, что наш юзер
> успел набрать, очищаем строку (с этим разобрался, вроде), выводим его,
> после него выводим юзерский ввод и даем ему писать дальше (что-то типа
> read -i "набранный текст").
> так вот, проблема как раз в том, чтобы запомнить то, что юзер успел набрать
> за отведенное время.
> банальный read -t15 сохраняет результат только при получении целой строки
> (т.е. по нажатию энтера), если не успел - извини, ниче не знаю. причем
> введенный текст он потом выплевывает в консоль, но перехватить этот вывод
> у меня никак не получилось (а может, и не выплевает, а это глюк баша,
> потому как текст появляется после приглашения, надо проверить strace'ом)
> так вот, есть какой-то способ считывать пользовательский ввод в течение
> этих 15 секунд с сохранением результатов, если энтер жмакнуть юзер не
> успел?
>
> альтернативные реализации зело непросты (типа как с помощью screen/tmux
> разбить окно пополам, но тогда нужно в них запускать отдельные скрипты,
> которые непонятно как должны между собой общаться. и прочее в таком духе,
> тянущее еще лишние зависимости). зачем писать такое на баше - отдельный
> вопрос. скорее для творческого саморазвития, интересно уже))


Reply to: