쉘에서 명령 실행이 실패하는지 여부를 감지하는 방법은 무엇입니까?

쉘에서 명령 실행이 실패하는지 여부를 감지하는 방법은 무엇입니까?

저는 Java를 사용하여 원격 컴퓨터에서 쉘 스크립트를 호출하고 있습니다.

쉘 실행이 실패했는지 알고 싶습니다. 그러나 $?스크립트가 완료된 후 반환 코드를 확인하는 것이 작동하지 않는다는 것을 발견했습니다 . $?스크립트의 마지막 명령의 결과 코드만 표시됩니다.

따라서 하나의 명령이 실행되지 않더라도 마지막 명령은 성공적으로 실행됩니다. 찾을 수 없습니다. 문제를 해결하는 방법을 알고 싶습니다.

셸에서 모든 명령의 결과 코드를 확인해야 합니까? 명령이 실행되지 않으면 스크립트를 종료하시겠습니까?

답변1

set -e스크립트 내에서 사용 하거나 -e시작 시 인터프리터에 전달할 수 있습니다.

#!/bin/sh
set -e

또는

/bin/sh -e /path/to/script.sh

 

http://pubs.opengroup.org/onlinepubs/007904975/utilities/set.html:

-이자형

이 옵션이 활성화되면 쉘 오류 결과에 나열된 이유로 인해 단순 명령이 실패하거나 종료 상태 값 >0을 반환하고 while, Until 또는 if 키워드 뒤에 오는 복합 목록의 일부가 아닌 경우, AND로 연결되지도 않고 OR 목록의 일부도 아니고 !가 앞에 오는 파이프도 아닙니다. 예약어를 사용하면 쉘이 즉시 종료되어야 합니다.

답변2

트랩을 사용할 수도 있습니다.

trap 'command' signal

쉘 스크립트는 다음과 같습니다:

trap 'trapHandler $LINENO' ERR

ERR 신호를 캡처합니다. trapHandler()이렇게 될 수 있습니다.

trapHandler()
{
    retCode=$?
    echo "[LINE:$1] Error:exited with status $retCode"
    exit $retCode
}

관련 정보