2012-06-27 2 views
0

나는 두 가지 명령의 결과에 따라 재에서 조건부를 만들어야한다. 문제는 그 중 하나가 결과를 stdout으로 반환하고 다른 하나는 exitcode로 반환한다는 것입니다. 테스트 표현식에서 exitcode를 사용할 수 있습니까?

내가

command2 
RET=$? 
if [ `command1` -eq 1 -a $RET -eq 2 ] ; then ... 

를 작성해야하거나 나를 단순히 [ ]의 논리 내에서 command2의 리턴 코드에 액세스 할 수 있도록 할 일부 구조가 있습니까?

if [ `command1` -eq 1 -a ${{{ command2 }}} -eq 2 ] ; then ... 

(${{{ }}}}는 반환 코드를 추출하는 마법의 표현 인와?)

답변

2

이 작성하는 것이 좋습니다 것 : 종료 코드는 다음 두 경우 검사 할 때

if [ "`command1`" -eq 1 ] && command2 
then 
    .... 
fi 

또는 :

if [ "`command1`" -eq 1 ] && { command2 ; [ "$?" = 2 ] ; } 
then 
    .... 
fi 

예 :

$ cat 1.sh 
ARG="$1" 

command1() 
{ 
    echo 1 
} 
command2() 
{ 
    return "$ARG" 
} 

if [ "`command1`" -eq 1 ] && { command2 ; [ "$?" = 2 ] ; } 
then 
    echo OK 
else 
    echo FAILED 
fi 

$ sh 1.sh 2 
OK 
$ sh 1.sh 3 
FAILED 
+0

'[ "\ 'command1 \'"...]'그렇지 않으면 출력이 정확하게 하나의 단어로 분리되지 않는 한 모든 것이 깨집니다. –

+0

@ JoSo : 맞습니다! 고맙습니다!! –

0

나는 $ /를 피할 방법이 없다고 생각하지만, 테스트 문 안에 명령어를 사용할 수 있습니다. 끝에는 ;echo $?을 붙입니다.

if [ `command1` -eq 1 -a `command2 ; echo $?` -eq 2 ] ; then ... 
관련 문제