제한된 횟수 동안 bash에서 명령 시도

제한된 횟수 동안 bash에서 명령 시도

기능에서 명령을 다시 시도하고 싶었습니다. 테스트를 위해 잘못된 명령( )을 작성했습니다 lsss. 5번 시도하고 실패해야 하지만 무한 루프에 갇혔습니다.

#!/bin/bash

RETRY () {

        Attempt=0
        Max_Attempts=5
        CMD=$1
        while [ $Attempt -lt $Max_Attempts ]
        do
            $CMD

        if [ $? -eq 0 ]; then
           echo "succeeded on Attempt $Attempt" >> /tmp/err.txt
            break
        else
                 Attempt=$( expr $Attempt + 1 )
        echo  "Command failed. Attempting  $Attempt/$Max_Attempts" >> /tmp/err.txt
                 sleep 2
        fi
done

}

LIST () {

        lsss  # COMMAND WRITTEN WRONGLY FOR TESTING

        if [ $? -eq 0 ]; then
         echo "SUCCESS" 
        else
        RETRY LIST

        echo "FAILED" 
        fi
}
LIST

답변1

귀하의 "질문"에는 질문이 없습니다. 나는 질문이 "왜?"라고 가정합니다.

LIST실행될 때마다 lsss실패하므로 RETRY LIST호출됩니다. 그런 다음 (내부에서 RETRY) LIST(as $CMD)가 다시 실행되고 처음부터 설명할 수 있습니다.

$CMDBash는 결코 내부를 지나치지 않습니다 RETRY. 두 함수가 서로 호출하면 점점 더 많이 쌓입니다. 그들 중 누구도 실제로 나가지 않습니다.


나는 당신의 전체 접근 방식에 결함이 있다고 생각합니다. 정확한 목적이 무엇인지는 모르겠지만 "제한된 횟수 동안 명령을 시도"하는 것이 출발점이 될 수 있습니다.

(max=5; for n in `seq 1 $max`; do your_command && break; done)

$max서브쉘은 현재 쉘을 벗어나기 위해 사용됩니다 . 전체 명령은 매우 정상적인 종료 코드를 반환합니다.

관련 정보