LinuxForum.Fans
Тема

Bash скрипт

Автор: tolik_577 14 сообщений 2399 просмотров
#222805

есть внешнее приложение "start" выдающее в терминал строки.
требуется : когда приложение выдаст строку с содержанием например "CCCOOOLLL" , запустить скрипт
ну пытаюсь так :

if [ -n $(./start | grep CCCOOOLLL &) ]
then
echo "запускаем скрипт "
fi

соответственно вопрос , наверное координально что-то нетак?

собственно ответ, чтоб вниз нелазить
Fat-Zer пишет:

./start | while read STRING; do
[ $(expr match "$STRING" '.*CCCOOOLLL.*') -ne 0 ] && echo "запускаем скрипт "
done

#222806
text
./start | grep CCCOOOLLL > /dev/null && echo "запускаем скрипт "
#222812
tolik_577 написал:
if [ -n "$(./start | grep CCCOOOLLL &)" ]

кавычек нехватает
и & - лишнее

#222817

все бы хорошо, но только "запускаем скрипт" появляется после завершения работы ./start , а мне бы сразу после появления в строке CCCOOOLLL


еще такой момент , а можно как нить так извернуться чтобы при скрипт выполнялся не единожды, а при каждом появлении CCCOOOLLL ?
спасибо за ответы

#222819

tolik_577, а как часто CCCOOOLLL может вообще появиться?

#222823

tolik_577, что должен сделать скрипт, запущенный при появлении строки CCCOOOLLL, если появилась новая строка CCCOOOLLL, а он ещё не отработал предыдущий вызов?

#222825

появляется редко , скрипт полюбому успеет отработать

скрипт будет делать архивные копии файлов размером несколько байт

#222829

Ну так целиком if [ -n "$(./start | grep CCCOOOLLL &)" ] в крон и скрипт выполнится, и проверит что на выхлопе.
Или же более подробно опиши, в тч что там за скрипт start

#222832

Пошел я по извратному пути,но вот это если допилить работает,
может все таки подскажете ченить без внешних файлов поадекватнее вариант

./start | grep CCCOOOLLL > t.tmp & # кидаем в файл идем дальше

while true ; do # из цикла надо вывалиться когда завершиться процесс "start", но пока так
inotifywait t.tmp # ждем чтоб файл изменился , ну тут можно после условие проверки последней строки файла
echo "запускаем скрипт"
done

#222833

Огласил бы сам скрипт start, может в него проверку. и запихнуть? И в кроне на еже-минут-час (как надо) повтор. А то не понятно.

#222834
tolik_577 написал:
еще такой момент , а можно как нить так извернуться чтобы при скрипт выполнялся не единожды, а при каждом появлении CCCOOOLLL ?

тогда лучше делать по-другому, как-то так:

text
./start | while read STRING; do
  [ $(expr match "$STRING" '.*CCCOOOLLL.*') -ne 0 ] && echo "запускаем скрипт "
done
#222837

История:
***CENSOR***

#222838
Fat-Zer написал:
text
./start | while read STRING; do
  [ $(expr match "$STRING" '.*CCCOOOLLL.*') -ne 0 ] && echo "запускаем скрипт "
done

Спасибо Fat-Zer , то что доктор прописал )))

Войдите или зарегистрируйтесь, чтобы ответить.