Модераторы: powerfox, ZeeLax
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Имитация ввода Enter, bash-скрипт 
:(
    Опции темы
batigoal
Дата 6.12.2005, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: нет
Всего: 151



Подскажите, пожалуйста, в таком вопросе.

Начал читать книгу по UNIX-системам. Там говориться о том, что можно "скормить" программе, требующей ручного ввода, данные из файла с помощью операции < . Попробовал, но столкнулся с такой проблемой: вводится весь файл целиком, а хотелось бы, чтобы он подавался на вход по мере надобности. Т.е. программа запросила первый параметр - первую строку, второй параметр - вторую строку, и т.д.

Или я не в ту сторону думаю, и данной операцией проблему не решить?


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
cenix
Дата 6.12.2005, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/dev/null
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 7.8.2004

Репутация: нет
Всего: 4



Операции <, > просто позволяют перенаправить стандартные потоки туда куда надо тебе, например из файла не на экран, а в поток ввода другой проги. Если ты хочешь читать по одной строчке, ты должен это сам делать, насколько я знаю так как ты хочешь( Т.е. программа запросила первый параметр - первую строку, второй параметр - вторую строку, и т.д.) нельзя сделать автоматом.
PM MAIL   Вверх
Шмель
Дата 6.12.2005, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 16.4.2004

Репутация: 7
Всего: 18



Цитата(cenix @ 6.12.2005, 18:50)
нельзя сделать автоматом.

можно

Lamer George, тебе нужен Expect
к сожалению, сам я им не пользовался, но доподлинно известно, что предназначен он именно для таких нужд smile




--------------------
будешь на Земле - заходи
PM MAIL ICQ   Вверх
batigoal
Дата 6.12.2005, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: нет
Всего: 151



Шмель
Спасибо, обязательно попробую.

А можно ли сделать то же самое из shell-скрипта? Как я понял, Expect использует свой язык и компилятор (Tcl), хотя и довольно легкий. Учить два языка одновремено будет тяжеловато smile


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
cenix
Дата 7.12.2005, 12:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/dev/null
*


Профиль
Группа: Участник
Сообщений: 135
Регистрация: 7.8.2004

Репутация: нет
Всего: 4



Шмель
Цитата

Цитата (cenix @ 6.12.2005, 18:50)
нельзя сделать автоматом.

можно

Lamer George, тебе нужен Expect

я говорю, что нельзя стандартными командами никсов это сделать, а если уж юзать как ты говоришь Tcl, то можно с тем же успехом считывать по строчке на с, благо gcc обычно всегда есть smile
PM MAIL   Вверх
Шмель
Дата 19.12.2005, 15:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 179
Регистрация: 16.4.2004

Репутация: 7
Всего: 18



Только что в новостях на ЛОРе наткнулся на упоминание об еще одной интересной утилите, предназначенной для замены Expect. Называется она empty
--------------------
будешь на Земле - заходи
PM MAIL ICQ   Вверх
batigoal
Дата 19.12.2005, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: нет
Всего: 151



Цитата
Только что в новостях на ЛОРе наткнулся на упоминание об еще одной интересной утилите, предназначенной для замены Expect. Называется она empty

Похоже, она попроще. Просто тот вариант я отложил на попозже, потому что он требовал установки TCL.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Alexandr87
Дата 22.12.2005, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


дыкий псых
***


Профиль
Группа: Завсегдатай
Сообщений: 1459
Регистрация: 27.11.2004
Где: Алматы, Казахстан

Репутация: 2
Всего: 39



Если программа выводит предложения на ввод в стандартный выходной поток, то можно попробовать использовать файл - через который будет веститься диалог.

./MyScript | program >> dialogFile

В MyScript

Можно вставить бесконечный цикл, в котором программа дописывает разделитель (любое число, которое с большой долей вероятности не встретиться в выводе программы program).
После, того как разделитель дописан, он (скрипт) выбрасывает в свой выходной поток нужные символы,
после чего организуем еще один бесконечный цикл (или накладываем условие, какое будет ясно ниже). В данном цыкле усыпляем программу на несколько секунд, читаем последнюю строку файла-диалога (tail -n 1 dialogFile). Если она не равна нашему разделителю, то прерываем цикл break, предвариельно при необходимости записав вывод программы program. Таким образом, мы попадаем в первый бесконечный цикл, где уже можем анализировать полученное от программы сообщение.

Чисто теоретически должно работать. Причем всё средсвами bash'а

PM Jabber   Вверх
batigoal
Дата 22.12.2005, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: нет
Всего: 151



Увы, выполняемый скрипт изменять нельзя. Собственно, конкретная задача - автоматизировать процесс установки билда на серверах, чтобы можно было запускать его автоматом по ночам. Установка крепко интеракивная, требуется вводить много конфигурационных параметров.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
bilbobagginz
Дата 22.12.2005, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 113
Всего: 317



Lamer George, если билды неудобны для автоматизации, то нужно иг изменять а не извращаться.
билд он для того и билд, чтобы получать строку с параметрами.

можешь привести пример того что нужно сделать ?

( желательно с примерами вывода. )

еще направление: возможно билды всего-то что и делают - создают конфигурационные файлы с параметрами... так может тебе скрипт такой автоматицццссский написать самому ... ?


Это сообщение отредактировал(а) bilbobagginz - 22.12.2005, 18:46


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
batigoal
Дата 22.12.2005, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: нет
Всего: 151



Менять его нельзя, потому что именно в таком виде он доставляется кастомерам. Мы должны иметь одинаковые платформы.

Цитата(bilbobagginz @ 22.12.2005, 19:44)
можешь привести пример того что нужно сделать ?

Суть в том, что надо автоматом вводить yes в ответ на текст лицензии, стартовать установку различных модулей, копирование фалйов, ввод параметров баз данных, номеров серверных портов, каталогов, почтовых аккаунтов и пр. В принципе, делать это руками не так сложно, просто времени уходит много, особенно на генерацию схем в базе данных.

Примеры вывода:

Цитата
Select your timezone: <юзер вводит номер таймзоны и жмет Enter>
Select menu item: <юзер вводит номер пункта меню и жмет Enter, происходит копирование файлов>
Do you want to configure the installed module: <юзер вводит y или n и жмет Enter>

и т.д.

Цитата(bilbobagginz @ 22.12.2005, 19:44)
возможно билды всего-то что и делают - создают конфигурационные файлы с параметрами

Нет, они еще и непосредственный деплоймент разворачивают. К тому же, просто файлы не подменить - их очень много, и они меняются со временем. Проще через имитацию ввода сделать.

Вроде empty - это то, что нужно. Я даже сумел ее поставить, для меня это немало smile

Это сообщение отредактировал(а) Lamer George - 22.12.2005, 23:06


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Linux/UNIX: Oбщие вопросы"
nickless
Imple
nerezus

В тему здесь вопросы общие - не привязанные к определенному ПО или дистрибутиву BSD/Linux/UNIX.
Например вопросы о выборе ОС для определенных задач (но если Вы просто хотите узнать "Какой дистрибутив лучше", то для этого есть Клуб юнуксоидов).
Общие вопросы по shell-программированию тоже лучше задавать здесь.


  • Вопросы мобильной разработки тут
  • Вы должны соблюдать правила форума.
  • Помните: какой вопрос, такой и ответ. Прежде чем задать вопрос прочитайте вот эту статью на форуме CIT.
  • Оскорблять запрещается.
  • Религиозные войны в Религиозных войнах.
  • Общение "просто так" в Клубе юнуксоидов. В отличие от многих других разделов, здесь разрешается сдержанно оффтопить и юморить в тему.

За интересные статьи, находки, решения, программы и просто реальную помощь будут ставиться + в репу).


В данный момент этот раздел модерируют nerezus, nickless, powerfox, pythonwin, Imple и ZeeLax. Если вы хотите помочь нам, пишите в ПМ и мы обсудим.


Спасибо. И use UNIX or die; С уважением, nerezus, nickless, powerfox, pythonwin, Imple, ZeeLax.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | *NIX системы: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0603 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.