bash-每次cmd1 stdout产生特定字符串时执行cmd2

bash-每次cmd1 stdout产生特定字符串时执行cmd2

我正在努力奔跑

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

每次标准输出

$ CAMEL_DEBUG=all evolution

产生“开始空闲”。

我想出了一个脚本,它可以执行我想要的操作,但只执行一次,它不是每次显示“starting idle”时都执行,而是只执行一次然后停止。我不知道 bash 是否足够好,可以强制它无限重复。

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

谢谢。

答案1

break命令终止while循环。将其删除。

答案2

你可以尝试一些更复杂的东西。首先将输出重定向evolution到文件:

CAMEL_DEBUG=all evolution > tmpout

然后进行一个无限while循环,读取文件并在发现字符串时做出反应:

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

相关内容