У меня есть скрипт, который greps и awks и подсчитывает IP-адреса с несколькими кодами состояния http.Хотя на самом деле не имеет значения, что это за сценарий, потому что моя цель заключается в следующем:
Я хочу вызвать команду `watch 'внутри этого сценария, чтобы он обновлял отображение каждые несколько секунд новыми даннымиполученные из динамических журналов apache.
Я могу нормально вызвать мой скрипт следующим образом:
$ watch --no-title ./bad_request.sh
Но я бы предпочел иметь команду `watch 'внутри самого скрипта, чтобы сделать вызовскрипт из командной строки намного чище.
Вот скрипт:
#!/bin/bash
#identify repeated offenders through 401 and 403 status codes
for ip in `awk '{print $1}' /var/log/apache2/* | sort -u`; do echo -n "$ip "; awk '{print $1 " " $9}' /var/log/apache2/* | egrep "( 401| 403)"| grep -c $ip; done | sort -k2 -r
Теперь я попытался просто вставить "watch -d --no-title" в скрипт,прямо перед циклом for, но он сердито ошибается.Я думаю, что это потому, что он только обрабатывает, пока не достигнет конца первой команды.Я также попытался поставить обратные тики и $ () по всему сценарию.Я также попытался сделать большую часть скрипта функцией bash и вызвать функцию watch.Никаких кубиков.
Есть идеи?
Кстати, я также открыт для улучшений сценария - я понимаю, что он немного избыточен / неэффективен.Конечно, это должно быть зарезервировано для другого вопроса переполнения стека.
Спасибо,
Кевин
РЕДАКТИРОВАТЬ: И еще одна вещь, я могу просто позвонить while true; do <bulk of script>; sleep 1; clear;
но я ненавижу этоЭто работает, но экран мерцает, и это просто неправильный способ сделать это.
РЕДАКТИРОВАТЬ 2: Еще один неприятный способ взломать, это просто создать два сценария.Первый:
watch --no-title ./bad_request
А затем просто вызовите этот скрипт.Это работает нормально, но должен быть лучший способ.
РЕДАКТИРОВАТЬ 3 (извините ...): Я снял флаг -d с `watch '.Это не обязательно для моего сценария.