Ещё можно читать по символу командой "read -N 1" в цикле. Итоговое сообщение слепить из введенных символов.
12 октября 2013 г., 0:13 пользователь Dmitry Alexandrov <[email protected]>написал: > > так вот, есть какой-то способ считывать пользовательский ввод в течение > > этих 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 <[email protected]> wrote: > > всем привет! > > хочется в одной приблуде реализовать "режим чата", суть которого в > > следующем: раз в 15, допустим, секунд проверяем наличие новых сообщений. > > в течение этого времени юзер может вводить свой текст, а по нажатию > энтера > > - отправлять. > > если получили новое сообщение - сохраняем в переменной то, что наш юзер > > успел набрать, очищаем строку (с этим разобрался, вроде), выводим его, > > после него выводим юзерский ввод и даем ему писать дальше (что-то типа > > read -i "набранный текст"). > > так вот, проблема как раз в том, чтобы запомнить то, что юзер успел > набрать > > за отведенное время. > > банальный read -t15 сохраняет результат только при получении целой строки > > (т.е. по нажатию энтера), если не успел - извини, ниче не знаю. причем > > введенный текст он потом выплевывает в консоль, но перехватить этот вывод > > у меня никак не получилось (а может, и не выплевает, а это глюк баша, > > потому как текст появляется после приглашения, надо проверить strace'ом) > > так вот, есть какой-то способ считывать пользовательский ввод в течение > > этих 15 секунд с сохранением результатов, если энтер жмакнуть юзер не > > успел? > > > > альтернативные реализации зело непросты (типа как с помощью screen/tmux > > разбить окно пополам, но тогда нужно в них запускать отдельные скрипты, > > которые непонятно как должны между собой общаться. и прочее в таком духе, > > тянущее еще лишние зависимости). зачем писать такое на баше - отдельный > > вопрос. скорее для творческого саморазвития, интересно уже)) >

