
EDIT0: Tengo 3 teléfonos inteligentes:
Un teléfono inteligente Jolla1 con SailfishOS v3 + Alien Dalvik y 2 teléfonos inteligentes Android.
Quiero poder diferenciarlos en lenguaje Shell:
En mi 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
En mi primer teléfono inteligente Android a través de 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
En mi segundo teléfono inteligente Android a través de 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
Intenté esto pero ambos dispositivos tienen la getprop
herramienta, por lo que no funciona:
getprop 2>/dev/null | grep -q ro.build.version.release && export osFamily=Android || export osFamily=$(uname -s)
POR CIERTO :Pez VelaOSes un verdadero Linux basado en el kernel de Linux + elDistribución de software del proyecto Mer.(el último se bifurca del descontinuadoMeegodistribución de Linux)
Respuesta1
Puede obtener tres respuestas distintas uname -m
y utilizarlas.
Esperamos una respuesta de falla del dispositivo sin uname
, pero suprimimos el error y tomamos la respuesta vacía como nuestro indicador.
case "$(uname -m 2>/dev/null)" in
(armv7l) DEVICE=Jolla ;;
(aarch64) DEVICE=Android1 ;;
("") DEVICE=Android2 ;;
(*) DEVICE=UNKNOWN ;;
esac
Si bien podríamos referirnos a los números de versión del software, es posible que estos cambien cuando se actualice el sistema operativo. Usar la información del hardware es más confiable en las circunstancias actuales, pero generará falsos positivos si obtiene más dispositivos que comparten la misma arquitectura de hardware.
Respuesta2
Otra forma podría ser instalar bash (la aplicación Termux, por ejemplo) en todos los dispositivos Android y hacer que el script pruebe la OSTYPE
variable bash:
En el dispositivo Android 8.1, la OSTYPE
variable bash es igual linux-android
(vea la captura de pantalla a continuación)
Por tanto el comando para diferenciar será:
echo $OSTYPE | grep -q android && export osFamily=Android || export osFamily=$(uname -s)