
EDIT0: 스마트폰이 3개 있습니다.
SailfishOS v3 + Alien Dalvik이 탑재된 Jolla1 스마트폰 1대와 안드로이드 스마트폰 2대.
나는 그것들을 쉘 언어로 구별할 수 있기를 원합니다.
내 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)
지금:SailfishOSLinux 커널을 기반으로 한 진정한 Linux입니다.Mer 프로젝트 소프트웨어 배포(마지막은 단종된 제품에서 포크되었습니다.미고리눅스 배포판)
답변1
세 가지 별개의 응답을 다시 받고 uname -m
이를 활용할 수 있습니다.
우리는 없는 장치에서 실패 응답을 기대 uname
하지만 오류를 억제하고 빈 응답을 표시기로 사용합니다.
case "$(uname -m 2>/dev/null)" in
(armv7l) DEVICE=Jolla ;;
(aarch64) DEVICE=Android1 ;;
("") DEVICE=Android2 ;;
(*) DEVICE=UNKNOWN ;;
esac
소프트웨어 버전 번호를 참조할 수 있지만 OS가 업데이트되면 변경될 수도 있습니다. 현재 상황에서는 하드웨어 정보를 사용하는 것이 더 안정적이지만 동일한 하드웨어 아키텍처를 공유하는 추가 장치를 얻으면 오탐이 발생합니다.