오류 발생 후 스크립트 실행

오류 발생 후 스크립트 실행

특정 단계에서 오류가 발생한 후에도 쉘 스크립트를 계속 실행하고 싶지만 오류 이후에 종료됩니다.

if [ condition ];then
     cmd
else 
     cmd1
     return 4
fi

cmd2

위의 단계가 실행되지 않았는데도 코드 4를 반환하고 cmd2를 실행하고 싶었지만 그런 일이 발생하지 않았습니다. 전체 코드가 함수 내에 있습니다.

답변1

함수 반환 지정한 다음 번호(또는 실행된 이전 명령의 반환 코드)를 사용하여 함수를 종료하므로 다음 명령(cmd2)을 실행하지 않고 종료하는 것은 정상적인 동작입니다. cmd2 명령을 실행하고 싶지만 함수 끝에 4를 반환하려는 경우(cmd 대신 cmd1을 사용하기 때문에) 다음과 같은 플래그를 사용합니다.

flag=0
if [ condition ];then
     cmd
else 
     cmd1
     flag=1
fi
cmd2
if [[ $flag -eq 1 ]]; then
     return 4
fi
return 0

하지만 이것은 약간 까다로워 보이기 때문에 다른 방법을 고려해야 합니다(두 가지 다른 기능?).

답변2

Bash에는 명령문이 있지만 return얻을 수 있는 유일한 것은 함수의 종료 상태(0에서 255 사이의 값)입니다. 그래서 return당신이 원하는 것이 아닙니다.

return문을 로 바꾸면 값 echo을 캡처하고 계속 진행할 수 있습니다.

대신 다음과 같이 할 수 있습니다.

#!/bin/bash
function master ()
{
    function check () 
    {
        if [ 1 == 2 ];then
            echo "Cmd1"
        else
            # Execute your command here
            echo 4
        fi
    }
    val=$(check)
    echo "Value: $val"
    echo "Done"
}
master

참고: 전체 코드를 master함수에 넣었습니다(현재 스크립트와 일관성을 유지하기 위해).

관련 정보