> так вот, есть какой-то способ считывать пользовательский ввод в течение > этих 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 > разбить окно пополам, но тогда нужно в них запускать отдельные скрипты, > которые непонятно как должны между собой общаться. и прочее в таком духе, > тянущее еще лишние зависимости). зачем писать такое на баше - отдельный > вопрос. скорее для творческого саморазвития, интересно уже))

