쉘 스크립트에서 매개변수를 사용하여 다른 스크립트를 실행하고 해당 반환 코드를 가져옵니다.

쉘 스크립트에서 매개변수를 사용하여 다른 스크립트를 실행하고 해당 반환 코드를 가져옵니다.

i686/32비트 듀얼 CPU에서 새로운 Debian Stretch 설치를 사용하여 Octave 4.2.1을 설치하고 ./mytest실행 권한을 부여한 후 다음을 실행했습니다.

#!/bin/bash
./mytest.m

어디서 test.m읽을까

#!/usr/bin/octave
exit(0)

에 저장된 두 개의 스크립트를 ~/tmp고려하면mytest

#!/bin/bash

if $1/mytest.m "$2"; then
  echo "good"
else
  echo "bad"
fi

그리고mytest.m

#!/usr/bin/octave

param = argv(){1};

if strcmp(param, "happyend")
  exit(0)
else
  exit(1)
end

Running은 normally로 전달된 tmp/mytest tmp happyend다음 로 전달되어 신호 0을 다시 전달하고 "good"을 인쇄합니다. 이제 변수에서 반환(종료) 코드를 어떻게 얻을 수 있습니까? (위 예에서는 0).happyendmytestmytest.mmytestmytest.m

직관적인 옵션

#!/bin/bash

result=$("$1"/mytest.m "$2")

if [ $result = 0 ]; then
  echo "good"
else
  echo "bad"
fi

불가능한.

답변1

명령에서 반환(종료) 코드를 얻으려면 값 $?을 다음과 같은 변수에 저장해야 합니다 result.

"$1/mytest.m" "$2"
result=$?
if [ "$result" -eq 0 ]; then
  echo "good"
else
  echo "bad"
fi

테스트할 만큼 오랫동안 결과를 저장하려면 result다음 명령을 사용하여 변수를 건너뛰세요.

"$1/mytest.m" "$2"
if [ $? -eq 0 ]; then
  echo "good"
else
  echo "bad"
fi

하지만 조심해$? 테스트 후 즉시 mytest.m을 실행해야 합니다. 후속 명령은그들의에 코드를 반환합니다 $?.

결과가 0인지 테스트하려는 경우 이를 정수로 처리할 필요가 없습니다. 명령 자체를 조건으로 생각하십시오.

if "$1/mytest.m" "$2"; then
  echo "good"
else
  echo "bad"
fi

관련 정보