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