bash 스크립팅에서 여러 가지를 테스트하고 있는데 설명을 얻을 수없는 문제가 발생했습니다.

0과 다른 종료 코드를 얻기 위해 의도적으로 잘못된 명령을 작성했지만 어떻게 든 여전히 0 인 것 같습니다.

실행중인 코드는 다음과 같습니다.

USER_NAME=$(id -uns) if [[ ${?} -ne 0 ]] then echo "Your command failed to execute with exit code ${?}" exit 1 fi echo "Your username is ${USER_NAME}" 

내 코드의 출력은 다음과 같습니다.

id : unknown option-s

Try 자세한 내용은 “id –help”를 참조하십시오.

종료 코드 0으로 명령을 실행하지 못했습니다.

사용자 이름은

어떤 식 으로든 echo 명령에 대한 종료 코드를 표시하는 것 같습니다. 그래도 종료 코드가 0이면 왜 if 문에 입력됩니까?

그렇다면 표시되어야하는 실제 종료 코드를 표시하려면 어떻게해야합니까?

답변

코드에서 if 문 내에서 인쇄 됨 은 테스트 [[ ${?} -ne 0 ]]의 종료 상태입니다. $? 값은 항상 가장 최근에 실행 된 명령의 종료 상태이며 테스트는 적어도 를 결과에 추가합니다.

id의 종료 상태를 인쇄하려면 값이 변경되지 않는 변수에 할당하고

id -uns err=$? if [[ $err -ne 0 ]]; then printf "id failed with code %d\n" "$err" >&2 exit 1 fi 

설명

  • 이 POSIX가 아닌 스크립트는 … [[ksh 구문의 일부이며 인터프리터의 일부로 실행되지만 내장 기능은 아닙니다. 그러나 인터프리터의이 부분은 기억 된 종료 코드를 재설정하는 것 같습니다.
  • 스크립트가 echo를 모두 실행하는 이유는 무엇입니까? 첫 번째 이후에 종료하고 두 번째로 이동하지 않습니다.
  • @pericynthion 실제로 실행 된 코드를 표시하지 않습니다. 표시되는 출력은 exit 1 문이없는 코드 버전. 나중에 추가되었을 것입니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다