Intereting Posts
Как обновить «командный кеш» после смены ссылок? Просмотр имен хостов в сети « Нет больше зеркал, чтобы попробовать». Arch Linux не может загрузиться с USB-ключа (невозможно смонтировать выбранный раздел) как равномерно выполнять тесты на linux Могу ли я получить полные возможности видео в гостевой книге Arch Linux в Virtual Box? Можно ли показать вывод rsync на одной строке? Использование tar в файле с символом @ (при символе) Нажатие на Git repo из сценария оболочки Sylpheed не выполняет автоматическую проверку учетных записей IMAP Почему Нуво так плохо работает для меня? Система продолжает замерзать Почему завершение неинтерактивного процесса bash влияет или не влияет на его дочерний процесс при запуске сценария? Прокомментируйте оператор if и соответствующее ключевое слово endif Как получить доступ к конечным точкам USB с последними ядрами Linux? Тот же файл, другое имя файла из-за проблемы с кодировкой?

Выход Grep Wvdial во время работы

Я хочу grep вывод из wvdial во время работы wvdial . На самом деле я хочу запустить задачу, когда модем подключен.

Я хочу сделать это следующим образом: grep string «IP-адрес», если он доступен, значит, подключен модем, а затем запустить другой сценарий оболочки для выполнения другой задачи.

Как это можно сделать возможным?

Строго говоря, ответ:

Многие программы, когда они где-то загружаются, буферизуют их вывод – они пишут сразу несколько строк. Это повышает производительность, но, конечно же, ломает ваши попытки grep выхода. GNU Coreutils включает утилиту stdbuf которая часто позволяет вам это изменить. Вы хотите изменить stdout или stderr на буферизацию строки. Это может сработать – но, вероятно, это не лучшее решение.

Лучший способ:

Если вы посмотрите в /etc/ppp , вы увидите там несколько скриптов, включая /etc/ppp/ip-up . Когда появляется ссылка PPP, pppd запускает этот скрипт. По крайней мере, на Debian этот скрипт запускает все сценарии в /etc/ppp/ip-up.d/ .

Поэтому гораздо более простое решение – поместить ваш сценарий оболочки в /etc/ppp/ip-up.d/ или отредактировать (или создать, если он не существует) /etc/ppp/ip-up . Аналогично …ipv6-up , а также …-down варианты. Есть еще несколько; Подробнее см. в разделе «Скрипты» man-страницы pppd .

Имейте в виду, что вы можете просто использовать сценарий up, чтобы сигнализировать вашему скрипту (или другому), что ссылка готова – она ​​не должна сама выполнять эту работу. Например, вы можете сигнализировать с чем-то таким же простым, как kill -USR1 other-script-pid а затем использовать trap & sleep для ожидания этого сигнала. Или вы можете открыть именованный канал («fifo», например, mkfifo ) для чтения (который будет блокироваться до тех пор, пока не появится писатель), а затем сценарий up просто echo alive > /path/to/fifo . Или, может быть, откликнуть IP-адрес или другую полезную информацию. Или ваш скрипт может kill -STOP $$ , а затем ваш скрипт может kill -CONT script-pid . Есть несколько способов сделать это. (Вы даже можете изо всех сил использовать dbus.)