종료 명령은 Linux와 HP-UX에서 다르게 동작합니다.

종료 명령은 Linux와 HP-UX에서 다르게 동작합니다.

저는 HP-UX(B.11.23)에서 LINUX(Red Hat Enterprise Linux Server 버전 6.5 - San Diego)로 마이그레이션 프로젝트를 진행하고 있습니다. Linux에서 HP-UX 명령이 제대로 작동하지 않는 경우가 있습니다. 그러나 다음과 같은 경우에는 대안을 찾는 데 어려움을 겪고 있습니다.

다음 코드는 스크립트의 예일 뿐이지만 코드의 최종 결과를 이해해야 합니다.

## Assigning a text value in retval (bad path scenario)_
retval="ERROR"
if [ $retval -eq 7 ]
then
     echo "I am in " $retval
fi
exit $retval

LINUX에서 이 코드를 실행해 보세요...

LINUX $> ksh --version
version         sh (AT&T Research) 93u+ 2012-08-01
LINUX $> ksh -x test12.ksh
+ retval=ERROR
+ [ ERROR -eq 7 ]
+ exit ERROR
tpl06429dat05::edwprod::/home/edwprod >echo $?
0
# look here return code of above executed script is 0_

이제 HP_UX에서도 동일한 코드가 실행됩니다.

UNIX $> uname -a
HP-UX ipeip06 B.11.23 U ia64 ******** unlimited-user license
UNIX $> strings /bin/ksh | grep Version | tail -2
@(#)Version 11/16/88
UNIX $> ksh -x test12.ksh
+ retval=ERROR
+ [ ERROR -eq 7 ]
test12.ksh[3]: ERROR: bad number
+ exit ERROR
test12.ksh[8]: ERROR: bad number
UNIX $> echo $?
1
# Look here, return code of above executed code is 1

Linux에서는 잘못된 매개변수(문자열)를 전달했기 때문에 "exit" 명령이 전혀 실행되지 않지만, HP-UX에서는 문제가 없습니다. 잘못된 매개변수가 있는 "exit" 명령이 실행되고 이것이 잘못된 명령임을 알려줍니다( echo $?)를 이 스크립트에 추가하세요. 이 반환 코드는 매우 중요합니다. 왜냐하면 이 반환 코드($?)를 기반으로 스크립트가 성공적으로 실행되었는지(0) 결정하기 때문입니다.

코드를 조정하면 문제가 해결될 수 있다는 것을 알고 있습니다. 하지만 HP_UX로 작성된 스크립트를 거의 15K 이상 다루기 때문에 여기서는 약간 어렵습니다. OS 수준에서 무언가를 변경할 수 있습니까(패키지/매개변수 변경)? 어떤 시스템 수준 변경이 필요합니까?

반면에 ksh 버전은 다르며 다르게 작동합니다. 따라서 이 답변은 피하는 것이 가장 좋습니다.

답변1

스크립트가 종료됩니다

exit $retval

retval그리고 이를 문자열(첫 번째 단어는 "ERROR:")로 설정합니다 .

~에 따르면사양이 exit내장되어 있습니다.,

종료 유틸리티는 부호 없는 10진 정수 n으로 지정된 종료 상태로 쉘이 종료되도록 해야 합니다. n이 지정되었지만 0에서 255 사이의 값이 없으면 종료 상태가 정의되지 않습니다.

"정의되지 않음"은 서로 다른 구현이 서로 다른 결과를 제공하는 것이 괜찮고 때로는 예상되기도 함을 의미합니다.

버전을 보면 ksh종료 상태는 HP-UX(11/16/88)에서는 1이고 Linux 설치(93u+)에서는 0입니다. Linux 시스템이 HP -UX 시스템처럼 작동하도록 하려면 이전 방식으로 실행되는 다른 ksh를 설치해야 합니다.므케시또는대한민국.

관련 정보