Android 에뮬레이터 내부의 서비스가 apk를 설치할 준비가 되었는지 또는 이 명령을 사용하지 않는지 테스트하는 스크립트를 작성해야 합니다.
adb -s emulator-5554 shell pm list package | grep package:com.android.
명령이 첫 번째 줄에 이러한 하위 문자열을 출력하지 않으면 avd가 apk 설치 준비가 되지 않은 것입니다.
시스템이 실행되고 있나요?
서비스를 찾을 수 없습니다
온라인
이건 내 스크립트야
if [ $(adb -s emulator-5554 shell pm list package | grep package:com.android. | head -n 1) = *"Is the system running?"* ] ||
[ $(adb -s emulator-5554 shell pm list package | grep package:com.android. | head -n 1) = *"Can't find service"* ] ||
[ $(adb -s emulator-5554 shell pm list package | grep package:com.android. | head -n 1) = *"online"* ] ; then
echo "could not find package service"
else
echo "found package service"
fi
그런데 이 오류가 발생해요
./script.sh: line 4: [: =: unary operator expected
./script.sh: line 5: [: =: unary operator expected
./script.sh: line 6: [: =: unary operator expected
답변1
테스트에서 명령 대체로 인해 $(adb -s ...)
여러 단어로 구성된 문자열이 생성되면 쉘은 이를 구문 오류로 처리합니다. 확장명을 인용해야 합니다.
[ "$(adb -s ...)" = *"Is the system running?"* ]
인용되지 않은 명령 대체의 결과는 인용되지 않은 변수 확장과 마찬가지로 분할 및 파일 이름 글로빙을 겪게 됩니다. 견적 확장을 통해 이러한 상황을 피할 수 있습니다. 귀하의 경우에는 문제를 일으키는 부서입니다.
명령 대체가 확장되면 테스트는 다음과 같을 수 있습니다.
if [ word1 word2 word3 = *"some string"* ]
이는 분명히 구문 오류입니다.