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...ffffb2e
및 0x2e == 46d
, 결과가 예상됩니다.
두 번째 질문의 경우 귀하의 명령문은 Python 프로그램의 if
종료 상태가 아닌 종료 상태를 테스트하고 있습니다 .echo $?
노력하다:
python val.py
rc=$?
echo $rc
if [ $rc == 46 ] ; then
...