폴링 명령의 올바른 출력

폴링 명령의 올바른 출력

bash를 처음 접한 것이므로 도움을 주시면 대단히 감사하겠습니다. 다음을 수행하는 스크립트를 찾고 있습니다. 매우 간단한 스크립트이지만 얻을 수 없는 것 같습니다.

  • 반환되는 명령을 실행하고 싶습니다.성공적인또는 출력의 다른 문자열.
  • 출력되는 경우확실히단어가 포함되어 있습니다성공적인5분 동안 잠자기 상태로 두고 다음 내용이 포함될 때까지 다시 실행하고 싶습니다.성공적인.

그것은 이렇게 보인다

until (SOMECOMMAND) &> /dev/null
do
    if(SOMECOMMAND contains successful);
    break;
    else sleep 300
done

echo -e "\nThe command was successful."

답변1

다음을 수행할 수 있습니다.

#!/bin/bash

output=
count=0

until [[ $output =~ successful ]]; do
    output=$(somecommand 2>&1)
    ((count++))
    sleep 300
done

printf '\n%s\n' "Command completed successfully after $count attempts."

출력 여부를 확인합니다.포함하다성공, 출력이 다음과 같은지 확인하려는 경우정확히"성공" =~으로 변경할 ==.

$( ... )명령 대체output매개변수를 출력에 설정하는 데 사용됩니다 somecommand.

답변2

stdout에 "successful"이라는 문자열이 인쇄될 때까지 some-command를 실행하고, 실패하면 5분 동안 휴면 상태로 둡니다.

until some-command | grep -q successful
do
  sleep $((60 * 5)) ### or "sleep 5m", if supported by your version of sleep
done

관련 정보