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: 알 수 없는 옵션 -- s
자세한 내용을 보려면 "id --help"를 시도하십시오.
종료 코드 0으로 인해 명령이 실패했습니다.
당신의 사용자 이름은
어떻게든 echo 명령의 종료 코드를 표시하는 것 같나요? 그럼에도 종료코드가 0인데 왜 if 문을 입력하는 걸까요?
그렇다면 표시되어야 하는 실제 종료 코드를 표시하려면 어떻게 해야 합니까?
답변1
코드의 명령문에서 if
종료 상태를 얻으십시오.인쇄테스트의 종료 상태입니다 [[ ${?} -ne 0 ]]
. 값은 $?
항상 가장 최근에 실행된 명령의 종료 상태이며, 적어도 값이 $?
결과로 설정되는 한 테스트는 명령으로 간주됩니다.
종료 상태를 인쇄하려면 id
값이 변경되지 않는 변수에 할당하고,
id -uns
err=$?
if [[ $err -ne 0 ]]; then
printf 'id failed with code %d\n' "$err" >&2
exit 1
fi