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
[[
는ksh
구문의 일부이며 인터프리터의 일부로 실행되지만 내장 기능은 아닙니다. 그러나 인터프리터의이 부분은 기억 된 종료 코드를 재설정하는 것 같습니다.echo
를 모두 실행하는 이유는 무엇입니까? 첫 번째 이후에 종료하고 두 번째로 이동하지 않습니다.exit 1
문이없는 코드 버전. 나중에 추가되었을 것입니다.