Grep Wvdial output enquanto está em execução

1

Desejo grep da saída de wvdial enquanto wvdial está em execução. Na verdade, quero disparar uma tarefa quando o modem está conectado.

Eu quero fazer isso da seguinte maneira: grep string "Endereço IP", se estiver disponível, significa que o modem está conectado e, em seguida, dispara outro script de shell para executar outra tarefa.

Como isso poderia ser possível?

    
por Shantanu Banerjee 13.11.2013 / 11:48

1 resposta

2

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.)

    
por 13.11.2013 / 12:17