SailfishOS+Alien Dalvik을 Android 장치와 자동으로 구별하는 명령

SailfishOS+Alien Dalvik을 Android 장치와 자동으로 구별하는 명령

편집0: 저는 3개의 스마트폰을 가지고 있습니다:

SailfishOS v3 + Alien Dalvik을 탑재한 Jolla1 스마트폰과 2대의 Android 스마트폰.

쉘 언어로 이들을 구별할 수 있기를 원합니다.

내 Jolla1 Linux에서:

$ uname -s
Linux
$ getprop ro.build.version.release
4.1.2
$ uname -a 
Linux myJolla1 3.4.108.20190506.1 #1 SMP PREEMPT Wed Oct 9 18:24:45 UTC 2019 armv7l armv7l armv7l GNU/Linux

내 첫 번째 Android 스마트폰에서 다음을 통해 adb shell:

shell@hlteatt:/ $ getprop ro.build.version.release
5.0
shell@hlteatt:/ $ uname -s
/system/bin/sh: uname: not found
127|shell@hlteatt:/ $ uname -a
/system/bin/sh: uname: not found

두 번째 Android 스마트폰에서 다음을 통해 adb shell:

BV9500Pro:/ $ uname -s
Linux
BV9500Pro:/ $ getprop ro.build.version.release
8.1.0
BV9500Pro:/ $ uname -a                                                                                                                             
Linux localhost 4.4.95 #9 SMP PREEMPT Wed Mar 20 18:03:34 CST 2019 aarch64

이것을 시도했지만 두 장치 모두에 getprop도구가 있으므로 작동하지 않습니다.

getprop 2>/dev/null | grep -q ro.build.version.release && export osFamily=Android || export osFamily=$(uname -s)

그런데:세일피시 OSLinux 커널을 기반으로 한 실제 Linux입니다. +Mer 프로젝트 소프트웨어 배포(마지막은 단종된 제품입니다.미고리눅스 배포판)

답변1

uname -m이로부터 벗어나 활용할 수 있는 세 가지 다른 응답이 있습니다 .

우리는 장치가 오류 없이 실패 응답을 내보낼 것으로 예상 uname하지만 오류를 억제하고 빈 응답을 표시기로 사용합니다.

case "$(uname -m 2>/dev/null)" in
  (armv7l)  DEVICE=Jolla ;;
  (aarch64) DEVICE=Android1 ;;
  ("")      DEVICE=Android2 ;;
  (*)       DEVICE=UNKNOWN ;;
esac

소프트웨어 버전 번호를 참조할 수 있지만 이러한 버전 번호는 운영 체제가 업데이트되면 변경될 수 있습니다. 현재의 경우 하드웨어 정보를 사용하는 것이 더 안정적이지만 동일한 하드웨어 아키텍처를 공유하는 장치가 더 많아지면 오탐지가 발생할 수 있습니다.

답변2

또 다른 접근 방식은 모든 Android 장치(예: Termux 앱)에 bash를 설치하고 스크립트 테스트 OSTYPEbash 변수를 갖는 것입니다.

Android 8.1 장치, OSTYPEbash 변수는 다음과 같습니다 linux-android(아래 스크린샷 참조).

따라서 차별화된 명령은 다음과 같습니다.

echo $OSTYPE | grep -q android && export osFamily=Android || export osFamily=$(uname -s)

여기에 이미지 설명을 입력하세요.

관련 정보