я использую WebInject (CLI, а не GUI) для тестирования онлайн-веб-сервисов. Я собирался пойти с третьей стороной, пока не найду этот маленький драгоценный камень и не пойму, что я могу спасти ...
Я хочу выполнить поиск результатов WebInject (сценарий Perl). Если он найдет шаблон, то отправьте результаты по почте. Я новичок в этом и не совсем уверен, как написать логику для оценки результатов и отправки их по почте.
Вот что у меня есть на данный момент:
$ perl webinject.pl | grep 'ТЕСТОВЫЙ СЛУЧАЙ НЕ ПРОШЕЛ'
Я хочу отправить электронное письмо только в том случае, если grep найдет совпадение, иначе электронное письмо не будет отправлено. Я хотел бы настроить это с помощью cron для работы с интервалом в 10 или 15 минут.
В качестве примечания, может ли grep захватывать начальные и конечные символы из соответствующего шаблона?
ОБНОВЛЕНИЕ 1: выяснил начальные и конечные строки (-A # -B #)
Огромное спасибо!
Вот однострочный, который должен работать:
perl webinject.pl | grep 'TEST CASE FAILED' 2>&1 > /tmp/grep.log && /usr/bin/mail -s "grep found something" root@example.org < /tmp/grep.log
Вот более общий случай с несколькими командами:
{ COMMAND1 ; COMMAND2 |grep 'your string here' ; } 2>&1 > /tmp/logfile && /usr/bin/mail -s "$SUBJECT" $MAILTO < /tmp/logfile
Код после &&
активируется только в том случае, если команда в фигурных скобках находит совпадение (код возврата равен нулю, что означает успех). Я использую 2> & 1, чтобы не пропустить ни одного вывода.
Вы также можете вывести эту информацию в системный журнал. Видеть Лучше ведение журнала для cronjobs? Отправить вывод cron в системный журнал?
Взгляните на этот ответ эхо на основе результата grep
Это почти то же самое, возьмите ответ, который лучше соответствует вашим потребностям, затем подавите часть echo No и замените часть echo yes командой электронной почты
Для ввода начальных и конечных символов вы можете использовать параметры -C или -A и -B (-C - это -A X -B X)
-A NUM, --after-context=NUM
Print NUM lines of trailing context after matching lines. Places a line containing -- between contiguous groups of matches.
-B NUM, --before-context=NUM
Print NUM lines of leading context before matching lines. Places a line containing -- between contiguous groups of matches.
-C NUM, --context=NUM
Print NUM lines of output context. Places a line containing -- between contiguous groups of matches.
если я понимаю, что вы хотите сделать, вам может понравиться следующий пример
perl webinject.pl > /tmp/webinject_result.txt
if grep --quiet 'TEST CASE FAILED' /tmp/webinject_result.txt;
then
grep -B 20 -B 2 'TEST CASE FAILED' /tmp/webinject_result.txt | mail someone@domain.tld
fi