프로세스 반환 값과 수량 비교

프로세스 반환 값과 수량 비교

val.py음수를 반환하는 Python 스크립트 가 있습니다 .

import sys
sys.exit(-1234)

이 bash 스크립트를 실행하면 $?반환 값은 46(-1234 아님)입니다. $? == 46와 값을 비교 하려고 해도 $? == "46"전혀 작동하지 않습니다.

python val.py
echo $?

if [ $? == 46 ]; then
    echo "Match"
else
    echo "NO"
fi
  • Q1: 반환 값이 올바르게 저장되지 않는 이유는 무엇입니까 $??
  • 질문2: 왜 $인가요? == 숫자 비교가 작동하지 않나요?

답변1

exit()프로세스에 전달된 상태는 단일 바이트로 마스크되므로 범위로 제한됩니다 [0-255]. 보다exit문서:

상태 값은 0, EXIT_SUCCESS, EXIT_FAILURE 또는 기타 값일 수 있습니다.대기 중인 상위 프로세스에서는 최하위 8비트(예: 상태 및 0377)만 사용할 수 있습니다..

2의 보수 구현에서는 , -1234d == 0x...ffffb2e0x2e == 46d, 결과가 예상됩니다.

두 번째 질문의 경우 귀하의 명령문은 Python 프로그램의 if종료 상태가 아닌 종료 상태를 테스트하고 있습니다 .echo $?

노력하다:

python val.py
rc=$?
echo $rc
if [ $rc == 46 ] ; then
...

관련 정보