bash - cmd1 stdout이 특정 문자열을 생성할 때마다 cmd2를 실행합니다.

bash - cmd1 stdout이 특정 문자열을 생성할 때마다 cmd2를 실행합니다.

나는 달리려고 노력하고있다.

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

표준 출력이 나올 때마다

$ CAMEL_DEBUG=all evolution

"유휴 시작"이 발생합니다.

나는 내가 원하는 것을 수행하는 이 스크립트를 생각해 냈지만 한 번만 "유휴 시작"이 표시될 때마다 수행하는 것이 아니라 한 번만 수행하고 중지합니다. 나는 bash를 끝없이 반복하도록 강요할 만큼 좋은 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

관련 정보