| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > *NIX системы: Общие вопросы > Имитация ввода Enter |
| Автор: batigoal 6.12.2005, 10:15 |
| Подскажите, пожалуйста, в таком вопросе. Начал читать книгу по UNIX-системам. Там говориться о том, что можно "скормить" программе, требующей ручного ввода, данные из файла с помощью операции < . Попробовал, но столкнулся с такой проблемой: вводится весь файл целиком, а хотелось бы, чтобы он подавался на вход по мере надобности. Т.е. программа запросила первый параметр - первую строку, второй параметр - вторую строку, и т.д. Или я не в ту сторону думаю, и данной операцией проблему не решить? |
| Автор: cenix 6.12.2005, 12:50 |
| Операции <, > просто позволяют перенаправить стандартные потоки туда куда надо тебе, например из файла не на экран, а в поток ввода другой проги. Если ты хочешь читать по одной строчке, ты должен это сам делать, насколько я знаю так как ты хочешь( Т.е. программа запросила первый параметр - первую строку, второй параметр - вторую строку, и т.д.) нельзя сделать автоматом. |
| Автор: Шмель 6.12.2005, 12:54 | ||
можно Lamer George, тебе нужен http://expect.nist.gov/ к сожалению, сам я им не пользовался, но доподлинно известно, что предназначен он именно для таких нужд |
| Автор: batigoal 6.12.2005, 14:00 |
| Шмель Спасибо, обязательно попробую. А можно ли сделать то же самое из shell-скрипта? Как я понял, Expect использует свой язык и компилятор (Tcl), хотя и довольно легкий. Учить два языка одновремено будет тяжеловато |
| Автор: cenix 7.12.2005, 12:47 | ||
Шмель
я говорю, что нельзя стандартными командами никсов это сделать, а если уж юзать как ты говоришь Tcl, то можно с тем же успехом считывать по строчке на с, благо gcc обычно всегда есть |
| Автор: Шмель 19.12.2005, 15:14 |
| Только что в новостях на ЛОРе наткнулся на упоминание об еще одной интересной утилите, предназначенной для замены Expect. Называется она http://empty.sourceforge.net/ |
| Автор: batigoal 19.12.2005, 15:20 | ||
Похоже, она попроще. Просто тот вариант я отложил на попозже, потому что он требовал установки TCL. |
| Автор: Alexandr87 22.12.2005, 16:04 |
| Если программа выводит предложения на ввод в стандартный выходной поток, то можно попробовать использовать файл - через который будет веститься диалог. ./MyScript | program >> dialogFile В MyScript Можно вставить бесконечный цикл, в котором программа дописывает разделитель (любое число, которое с большой долей вероятности не встретиться в выводе программы program). После, того как разделитель дописан, он (скрипт) выбрасывает в свой выходной поток нужные символы, после чего организуем еще один бесконечный цикл (или накладываем условие, какое будет ясно ниже). В данном цыкле усыпляем программу на несколько секунд, читаем последнюю строку файла-диалога (tail -n 1 dialogFile). Если она не равна нашему разделителю, то прерываем цикл break, предвариельно при необходимости записав вывод программы program. Таким образом, мы попадаем в первый бесконечный цикл, где уже можем анализировать полученное от программы сообщение. Чисто теоретически должно работать. Причем всё средсвами bash'а |
| Автор: batigoal 22.12.2005, 16:32 |
| Увы, выполняемый скрипт изменять нельзя. Собственно, конкретная задача - автоматизировать процесс установки билда на серверах, чтобы можно было запускать его автоматом по ночам. Установка крепко интеракивная, требуется вводить много конфигурационных параметров. |
| Автор: bilbobagginz 22.12.2005, 18:44 |
| Lamer George, если билды неудобны для автоматизации, то нужно иг изменять а не извращаться. билд он для того и билд, чтобы получать строку с параметрами. можешь привести пример того что нужно сделать ? ( желательно с примерами вывода. ) еще направление: возможно билды всего-то что и делают - создают конфигурационные файлы с параметрами... так может тебе скрипт такой автоматицццссский написать самому ... ? |
| Автор: batigoal 22.12.2005, 23:05 | ||||||
Менять его нельзя, потому что именно в таком виде он доставляется кастомерам. Мы должны иметь одинаковые платформы.
Суть в том, что надо автоматом вводить yes в ответ на текст лицензии, стартовать установку различных модулей, копирование фалйов, ввод параметров баз данных, номеров серверных портов, каталогов, почтовых аккаунтов и пр. В принципе, делать это руками не так сложно, просто времени уходит много, особенно на генерацию схем в базе данных. Примеры вывода:
и т.д.
Нет, они еще и непосредственный деплоймент разворачивают. К тому же, просто файлы не подменить - их очень много, и они меняются со временем. Проще через имитацию ввода сделать. Вроде empty - это то, что нужно. Я даже сумел ее поставить, для меня это немало |