-e가 스크립트에서 오류를 포착하도록 하려면 어떻게 해야 합니까?

-e가 스크립트에서 오류를 포착하도록 하려면 어떻게 해야 합니까?

갖고 있다고 할 수 있어요apple.sh

set -e
...some commands #X...
./banana.sh
...more commands #Y..

그런 다음banana.sh

set -e
...some commands #Z...

내 예상으로는 의 어딘가에서 오류가 발생하면 오류 상태로 종료 banana.sh되므로 오류도 보고 종료될 것입니다. 이런 행동을 본 적도 있는 것 같아요. 그러나 이제 오류가 발생하면 예상대로 종료되지만 거기에서 "일부 명령 #Y" 항목을 계속 실행하지만 이것이 사실이 아니라는 것을 알았습니다 .banana.shapple.shbanana.shapple.sh

오류가 banana팝업으로 표시되도록 하려면 어떻게 해야 합니까 apple?

이것은 RHEL5에 있습니다

답변1

귀하의 경우가 아닐 수도 있지만 banana.sh무시되는 특정 상황에서 전화하고 있습니까?-e

존재하다배쉬 참조 매뉴얼이러한 유형의 컨텍스트에 대한 자세한 설명을 읽을 수 있으며, 여기서 중요한 정보는 다음과 같습니다.

-e를 생략한 컨텍스트에서 복합 명령 또는 셸 함수가 실행되는 경우 -e가 설정되고 명령이 오류를 반환하더라도 복합 명령 또는 함수의 본문 내에서 실행되는 모든 명령은 -e 설정의 영향을 받지 않습니다. 상태. -e를 생략한 컨텍스트에서 복합 명령이나 쉘 함수가 실행될 때 -e를 설정하면 함수 호출이 포함된 복합 명령이나 명령이 완료될 때까지 설정이 적용되지 않습니다.

이는 다음과 같은 경우를 의미합니다 apple.sh.

set -e

func() {
        echo '...some commands #X...'
        false # Suppose ./banana.sh fails here
        echo '...some commands #Y...'
        true
}

if func; then
        echo 'func() returns success'
else
        echo 'func() returns failure'
fi

다음과 같은 결과가 출력됩니다.

...some commands #X...
...some commands #Y...
func() returns success

bash뿐만 아니라 dash 및 zsh를 포함한 다른 쉘도 동일한 결과를 제공합니다.

귀하의 질문에 대답하려면 적어도 bash에서는 동작을 변경할 수 있는 방법이 없는 것 같습니다.

관련 정보