
EDIT0: У меня 3 смартфона:
Один смартфон Jolla1 с SailfishOS v3 + Alien Dalvik и 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)
КСТАТИ :SailfishOSэто настоящий Linux, основанный на ядре Linux +Распространение программного обеспечения проекта Mer(последний был ответвлением от прекращенногоMeeGo(Дистрибутив Linux)
решение1
Вы можете получить три различных ответа uname -m
и использовать это.
Мы ожидаем ответа об ошибке от устройства без uname
, но мы подавляем ошибку и принимаем пустой ответ в качестве индикатора.
case "$(uname -m 2>/dev/null)" in
(armv7l) DEVICE=Jolla ;;
(aarch64) DEVICE=Android1 ;;
("") DEVICE=Android2 ;;
(*) DEVICE=UNKNOWN ;;
esac
Хотя мы могли бы ссылаться на номера версий программного обеспечения, они могут измениться при обновлении ОС. Использование информации об оборудовании более надежно в ваших текущих обстоятельствах, но приведет к ложным срабатываниям, если вы получите дополнительные устройства с той же аппаратной архитектурой.
решение2
Другой способ — установить bash (например, приложение Termux) на все устройства Android и заставить скрипт проверить OSTYPE
переменную bash:
На устройстве Android 8.1 OSTYPE
переменная bash равна linux-android
(см. скриншот ниже)
Поэтому команда для дифференциации будет следующей:
echo $OSTYPE | grep -q android && export osFamily=Android || export osFamily=$(uname -s)