쉘 스크립트의 if 조건을 충족할 수 없습니다.

쉘 스크립트의 if 조건을 충족할 수 없습니다.

다음 쉘 스크립트를 실행하려고 합니다.

function Check_Status () {

       if [[ "$(adb shell getprop sys.boot_completed)" =~ "adb: no devices/emulators found" ]]; 
       then
          echo "here"

       else 
            echo "im here"
       fi;
};

Check_Status

다음과 같은 출력이 표시됩니다. "I am here" 대신 "here"가 표시될 것으로 예상했습니다.

스크린샷

무엇이 누락되었을지 확실하지 않음

답변1

사진에 있는 텍스트것 같다네, 스크립트와 동일합니다. 하지만 사진 한 장만으로는 확실히 알기는 어렵습니다.

하지만 스크립트를 실행할 때 텍스트가 터미널에 어떻게 도착하는지 확인하세요. 명령 대체는 출력을 캡처해야 하며 캡처한 내용은 인쇄되지 않습니다. adb메시지는 표준에 따라 인쇄될 수 있습니다.실수는 표준 출력이 아니므로 캡처되지 않습니다.

다음과 같이 이를 확인할 수 있습니다.

echo "running the command substitution... (errors would print after this line)"
output=$(adb shell getprop sys.boot_completed)
echo "captured output (stdout): '$output'"

그리고 거기에서 무엇이 나오는지보십시오.

이것이 실제로 문제인 경우 명령 대체에서 stderr를 stdout으로 리디렉션해야 합니다.

if [[ "$(adb shell getprop sys.boot_completed 2>&1)" =~ "adb: no devices/emulators found" ]]; then
    ...

관련 정보