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).happyend
mytest
mytest.m
mytest
mytest.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