Здравствуйте!Имея совсем небольшой опыт написания простейших скриптов под оболочку я столкнулся с такой ситуацией, когда моих знаний явно не хватает, поэтому обращаюсь к сообществу.
Необходимо в скрипте прописать реакцию на появление сообщения при работе команды.
Т.е.#!/bin/bash
/usr/local/bin -o option1 -b option2 -c option3
PID=$!
а вот здесь нужно перехватить сообщение с вывода работы команды, например "command work, press ctrl+c" и передать CTRL+C вместо пользователя за клавиатурой.
kill -INT $PIDЧто-то типа работы trap, но там ждут срабатывания определённого сигнала, а здесь необходимо сработать от сообщения.
Просто убить процесс нельзя, т.к. потеряются данные, которые приложение пишет в свой файл. А если его оборвать через ctrl+c, оно сохраняет данные.Заранее спасибо, коллеги.
начни с этого
http://www.opennet.me/base/dev/interactive_tools.txt.html
> начни с этого
> http://www.opennet.me/base/dev/interactive_tools.txt.htmlСпасибо за ссылку, очень интересная статья.
Но в моём случае это не выход, к сожалению.
Устройство, где будет работать скрипт - это маршрутизатор с предустановленной Linux в весьма кастрированном виде, где ОС занимает менее 10 Мб. Поставить туда что-то нереально и необходимо использовать стандартные инструменты скриптового языка.Ещё раз спасибо за ссылку!
>> начни
> Устройство, где будет работать скрипт - это маршрутизатор с предустановленной Linux вТогда запускайте скрипт на сервере, который будет подключаться к вашему устройству
>>> начни
>> Устройство, где будет работать скрипт - это маршрутизатор с предустановленной Linux в
> Тогда запускайте скрипт на сервере, который будет подключаться к вашему устройствуТак это устройство (маршрутизатор) будет подключаться к другим, проверять их отклики по определённому алгоритму, а сами устройства будут динамически меняться.
>> Тогда запускайте скрипт на сервере, который будет подключаться к вашему устройству
> Так это устройство (маршрутизатор) будет подключаться к другим, проверять их отклики по
> определённому алгоритму, а сами устройства будут динамически меняться.Тогда запускайте скрипт на сервере, который будет подключаться к другим, проверять их отклики по определённому алгоритму, а сами устройства будут динамически меняться.
А на маршрутизаторе - пропишите правила чтоб сервер смог это сделать.
>>> Тогда запускайте скрипт на сервере, который будет подключаться к вашему устройству
>> Так это устройство (маршрутизатор) будет подключаться к другим, проверять их отклики по
>> определённому алгоритму, а сами устройства будут динамически меняться.
> Тогда запускайте скрипт на сервере, который будет подключаться к другим, проверять их
> отклики по определённому алгоритму, а сами устройства будут динамически меняться.
> А на маршрутизаторе - пропишите правила чтоб сервер смог это сделать.Всё-таки задача стоит именно такая, как описано. Без поднятия других серверов и устройств. Коллеги, если есть что-то по ситуацию - с благодарностью выслушаю рекомендации и советы.
Спасибо.
> Всё-таки задача стоит именно такая, как описано. Без поднятия других серверов и
> устройств. Коллеги, если есть что-то по ситуацию - с благодарностью выслушаюБлин, у вас есть устройство, вы хотите запустить на нем некий функционал, его в нем нет. Следовательно вам нужно изменить софт этого устройства. Если вы не можете изменить софт, значит берете другое устройство.
В вашем случае компилируйте дополнительные утилиты для вашего маршрутизатора, копируйте куда-нибудь, флэшка, фтп-сервер.
На устройстве делаете скрипт, который закачивает эти утилиты в память и потом использует
> Блин, у вас есть устройство, вы хотите запустить на нем некий функционал,
> его в нем нет. Следовательно вам нужно изменить софт этого устройства.
> Если вы не можете изменить софт, значит берете другое устройство.Не подходит, устройство изменить нельзя
> В вашем случае компилируйте дополнительные утилиты для вашего маршрутизатора, копируйте
> куда-нибудь, флэшка, фтп-сервер.Для начала необходимо разобраться КАКИМ ОБРАЗОМ возможно решить эту задачу не используя громоздкой конструкции. Иначе либо придётся следить, чтобы все "костыли" исправно работали. Метод использования expect хорош, но он работает при получении какого-либо сигнала или команды, а не сообщения в логах. По-крайней мере я не нашёл такого описания в его функционале.
> На устройстве делаете скрипт, который закачивает эти утилиты в память и потом
> используетЭто не сложно, важнее сперва найти метод и способ решения задачи.
>[оверквотинг удален]
>> В вашем случае компилируйте дополнительные утилиты для вашего маршрутизатора, копируйте
>> куда-нибудь, флэшка, фтп-сервер.
> Для начала необходимо разобраться КАКИМ ОБРАЗОМ возможно решить эту задачу не используя
> громоздкой конструкции. Иначе либо придётся следить, чтобы все "костыли" исправно работали.
> Метод использования expect хорош, но он работает при получении какого-либо сигнала
> или команды, а не сообщения в логах. По-крайней мере я не
> нашёл такого описания в его функционале.
>> На устройстве делаете скрипт, который закачивает эти утилиты в память и потом
>> использует
> Это не сложно, важнее сперва найти метод и способ решения задачи.Опишите тогда нормально задачу, а не ее ограничения.
Для указанных ограничений уже подсказали способы реализации.
>[оверквотинг удален]
>> Для начала необходимо разобраться КАКИМ ОБРАЗОМ возможно решить эту задачу не используя
>> громоздкой конструкции. Иначе либо придётся следить, чтобы все "костыли" исправно работали.
>> Метод использования expect хорош, но он работает при получении какого-либо сигнала
>> или команды, а не сообщения в логах. По-крайней мере я не
>> нашёл такого описания в его функционале.
>>> На устройстве делаете скрипт, который закачивает эти утилиты в память и потом
>>> использует
>> Это не сложно, важнее сперва найти метод и способ решения задачи.
> Опишите тогда нормально задачу, а не ее ограничения.
> Для указанных ограничений уже подсказали способы реализации.А что не ясно из первого сообщения? Я уточню.
> А что не ясно из первого сообщения? Я уточню.#!/bin/bash
/usr/local/bin -o option1 -b option2 -c option3
PID=$!
а вот здесь нужно перехватить сообщение с вывода работы команды, например "command work, press ctrl+c" и передать CTRL+C вместо пользователя за клавиатурой.
kill -INT $PID++++++++++++++++++++++++++++++++
#!/bin/bash
PID=$!/usr/local/bin -o option1 -b option2 -c option3 | grep 'press crtl+c' && kill -INT $PID