Bash: 성공할 때까지 명령을 반복적으로 실행합니다.

Bash: 성공할 때까지 명령을 반복적으로 실행합니다.

때때로 성공하는 조타 명령이 있습니다.

달리기:

cmd1 || cmd1

첫 번째 실행이 실패하면 두 번 실행됩니다. 성공할 때까지 cmd1을 계속 실행하고 각 실행 사이에 절전 모드를 유지하려면 어떻게 해야 합니까? 감사해요.

답변1

until당신을 위해 이 일을 해줄 것입니다:

until cmd1; do sleep 1; done

이는 cmd1성공할 때까지 실행되며 각 실행 사이에 1초를 기다립니다.

영원히 실행되지 않으려면 최대 반복 횟수를 추가할 수 있습니다.

max=5; until cmd1 || [[ "$max" -le 0 ]]; do sleep 1; ((--max)); done

성공 하면 cmd1전체 표현식이 성공하고 $?0이 됩니다. 성공적으로 실행되지 않고 루프가 cmd1종료되면 전체 표현식이 실패하고 $?0이 아닙니다. 이를 사용하여 수행할 작업을 결정할 수 있습니다.

max=5
if until cmd1 || [[ "$max" -le 0 ]]; do sleep 1; ((--max)); done; then
    echo Succeeded
else
    echo Failed
fi

또는 더 구체적으로 말하자면,

max=5
until cmd1 || [[ "$max" -le 0 ]]; do sleep 1; ((--max)); done
if [ "$?" = 0 ]; then
    echo Succeeded
else
    echo Failed
fi

관련 정보