
EDIT0: Ich habe 3 Smartphones:
Ein Jolla1-Smartphone mit SailfishOS v3 + Alien Dalvik und 2 Android-Smartphones.
Ich möchte sie in der Shell-Sprache unterscheiden können:
Auf meinem 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
Auf meinem ersten Android-Smartphone über 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
Auf meinem zweiten Android-Smartphone über 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
Ich habe dies versucht, aber beide Geräte verfügen über das getprop
Tool, sodass dies nicht funktioniert:
getprop 2>/dev/null | grep -q ro.build.version.release && export osFamily=Android || export osFamily=$(uname -s)
Übrigens:SailfishOSist ein echtes Linux basierend auf dem Linux-Kernel + demMer-Projekt-Softwareverteilung(letzteres ist ein Ableger der nicht mehr erhältlichenMeeGoLinux-Distribution)
Antwort1
Sie können drei verschiedene Antworten zurückerhalten uname -m
und diese nutzen.
Wir erwarten eine Fehlerantwort vom Gerät ohne uname
, aber wir unterdrücken den Fehler und verwenden die leere Antwort als unseren Indikator.
case "$(uname -m 2>/dev/null)" in
(armv7l) DEVICE=Jolla ;;
(aarch64) DEVICE=Android1 ;;
("") DEVICE=Android2 ;;
(*) DEVICE=UNKNOWN ;;
esac
Wir könnten uns zwar auf die Softwareversionsnummern beziehen, diese können sich jedoch ändern, wenn das Betriebssystem aktualisiert wird. Die Verwendung der Hardwareinformationen ist unter Ihren aktuellen Umständen zuverlässiger, führt jedoch zu Fehlalarmen, wenn Sie weitere Geräte mit derselben Hardwarearchitektur erhalten.
Antwort2
Eine andere Möglichkeit wäre, Bash (z. B. die Termux-App) auf allen Android-Geräten zu installieren und das Skript die OSTYPE
Bash-Variable testen zu lassen:
Auf dem Android 8.1-Gerät ist die OSTYPE
Bash-Variable gleich linux-android
(siehe Screenshot unten):
Der Befehl zur Differenzierung lautet daher:
echo $OSTYPE | grep -q android && export osFamily=Android || export osFamily=$(uname -s)