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

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

Estou tentando correr

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

cada vez que stdout de

$ CAMEL_DEBUG=all evolution

produz "iniciando ocioso".

Eu criei esse script, que faz o que eu quero, mas apenas uma vez, não faz isso toda vez que "iniciando ocioso" é mostrado, mas apenas uma vez e para. Não sei se o bash é bom o suficiente para forçá-lo a se repetir indefinidamente.

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.

Responder1

O breakcomando encerra o whileloop. Largue.

Responder2

Você poderia tentar algo um pouco mais complexo. Primeiro redirecione a saída evolutionpara um arquivo:

CAMEL_DEBUG=all evolution > tmpout

Em seguida, faça um loop infinito whileque lê o arquivo e reage 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

informação relacionada