터미널과 독립적으로 백그라운드에서 명령을 실행하고, 실패할 경우 대체 명령을 실행합니다.

터미널과 독립적으로 백그라운드에서 명령을 실행하고, 실패할 경우 대체 명령을 실행합니다.

목표: 터미널과 독립적으로 명령을 실행하고 즉시 반환합니다. 명령이 실패하면 대체 터미널 독립적 명령을 실행하고 즉시 반환하십시오.

나는 다음을 수행했습니다. 명령이 유효하면 작동하지만, 실패해도 오류 코드 0을 반환합니다. 첫 번째 거부를 제거하여 코드를 수정할 수 있지만 명령이 즉시 반환되지는 않습니다.

        ErrorCode=$(
            nohup "${Command[@]}" >/dev/null 2>&1 &
            Pid=$!
            disown "${Pid}"
            wait "${Pid}"
            echo "$?"
        )
        if ((ErrorCode != 0)); then
            nohup "${CommandAlternative[@]}" >/dev/null 2>&1 &
        else
            echo "#Debug: ErrorCode: ${ErrorCode}"
        fi

그래서 기본적으로 이전 명령의 오류 코드를 캡처할 수 없습니다. 명령은mpv "${MusicFile}"

답변1

명령이 실패하고 3초 이내에 종료된다고 가정합니다.

    "${Command[@]}" >/dev/null 2>&1 &
    Pid=$!
    disown "${Pid}"
    sleep 3
    if ! ps --pid "$Pid" >/dev/null; then
        "${CommandAlternative[@]}" >/dev/null 2>&1 &
        disown
    fi

효과: 이전 명령이 실패하고 3초 이내에 종료된 경우 대체 명령을 실행합니다.

관련 정보