bash - executa o cmd2 cada vez que o cmd1 stdout produz uma string específica

0

Estou tentando executar

WID='xdotool search "Inbox" | head -1'
xdotool windowactivate $WID
xdotool key Up

cada vez que stdout

$ CAMEL_DEBUG=all evolution

produz "início inativo".

Eu criei este script, que faz o que eu quero, mas apenas uma vez, ele não está sendo feito toda vez que "iniciar inativo" é exibido, mas apenas uma vez e pára. Eu não sei bash bom o suficiente para forçá-lo a se repetir sem parar.

exec 3< <(CAMEL_DEBUG=all evolution)

while read line; do
   case "$line" in
   *"starting idle"*)
      echo "'$line' contains staring idle"

    WID='xdotool search "Inbox" | head -1'
        xdotool windowactivate $WID
        xdotool key Up

      break
      ;;
   *)
      echo "'$line' does not contain starting idle."
      ;;
   esac
done <&3

exec 3<&-

Obrigado.

    
por cronulis 08.05.2013 / 10:15

2 respostas

0

O comando break finaliza o loop while . Solte isso.

    
por 08.05.2013 / 10:24
0

Você poderia tentar algo um pouco mais complexo. Primeiro, redirecione a saída de evolution para um arquivo:

CAMEL_DEBUG=all evolution > tmpout

Em seguida, faça um loop while interminável que leia o arquivo e reaja se uma string for encontrada:

#!/usr/bin/env bash
while true; do
    while read line; do
    case "$line" in
        *"starting idle"*)
        echo "'$line' contains staring idle"

        WID='xdotool search "Inbox" | head -1'
        xdotool windowactivate $WID
        xdotool key Up

        break
        ;;
        *)
        echo "'$line' does not contain starting idle."
        ;;
    esac
    done < tmpout
done
    
por 08.05.2013 / 14:51