bash: ejecuta cmd2 cada vez que cmd1 stdout genera una cadena específica

bash: ejecuta cmd2 cada vez que cmd1 stdout genera una cadena específica

estoy tratando de correr

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

cada vez que sale estándar de

$ CAMEL_DEBUG=all evolution

produce "arranque inactivo".

Se me ocurrió este script, que hace lo que quiero, pero solo una vez, no lo hace cada vez que se muestra "iniciar inactivo", sino solo una vez y se detiene. No conozco bash lo suficientemente bien como para obligarlo a repetirse sin cesar.

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<&-

Gracias.

Respuesta1

El breakcomando finaliza el whilebucle. Déjalo caer.

Respuesta2

Podrías probar algo un poco más complejo. Primero redirija la salida evolutiona un archivo:

CAMEL_DEBUG=all evolution > tmpout

Luego haga un whilebucle sin fin que lea el archivo y reaccione si se encuentra una cadena:

#!/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

información relacionada