Estritamente falando, uma resposta:
Muitos programas, quando canalizados em algum lugar, armazenam em buffer sua saída - eles escrevem várias linhas de uma só vez. Isso aumenta o desempenho, mas, obviamente, quebra suas tentativas de grep da saída. O GNU Coreutils inclui um utilitário stdbuf , que geralmente permite alterar isso. Você deseja alterar stdout ou stderr para line-buffered. Isso pode funcionar, mas provavelmente não é a melhor solução.
Uma maneira melhor:
Se você procurar em /etc/ppp , verá vários scripts, incluindo /etc/ppp/ip-up . Quando o link PPP aparece, o pppd executa esse script. Pelo menos no Debian, esse script então executa todos os scripts em /etc/ppp/ip-up.d/ .
Portanto, a solução muito mais simples é colocar seu script de shell em /etc/ppp/ip-up.d/ ou editar (ou criar, se ele não existir) /etc/ppp/ip-up . Existe similarmente um …ipv6-up , e também …-down variantes também. Existem mais alguns; verifique a % "Scripts" da página% depppd da página para obter detalhes.
Tenha em mente que você pode simplesmente usar o script up para sinalizar seu script (ou algum outro) de que o link está pronto - ele não precisa fazer o trabalho em si. Por exemplo, você pode sinalizar com algo tão simples quanto kill -USR1 other-script-pid e, em seguida, usar trap & sleep para aguardar esse sinal. Ou você pode abrir um pipe nomeado ("fifo", por exemplo, mkfifo ) para leitura (que bloqueará até que haja um gravador) e, em seguida, tenha o script up apenas echo alive > /path/to/fifo . Ou talvez ecoar o endereço IP ou outras informações úteis. Ou seu script poderia kill -STOP $$ e, em seguida, seu script para cima poderia kill -CONT script-pid . Existem várias maneiras de conseguir isso. (Você pode até mesmo sair e usar o dbus.)