从 Android 设备自动区分 SailfishOS+Alien Dalvik 的命令

从 Android 设备自动区分 SailfishOS+Alien Dalvik 的命令

EDIT0:我有 3 部智能手机:

一部配备 SailfishOS v3 + Alien Dalvik 的 Jolla1 智能手机和 2 部 Android 智能手机。

我希望能够用 shell 语言区分它们:

在我的 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)

顺便提一句 :旗鱼操作系统是一个真正的Linux,基于Linux内核+Mer项目软件分发(最后一个是从已停产的米戈Linux 发行版)

答案1

您可以从中得到三个不同的响应uname -m并加以利用。

我们期望设备发出不带 的故障响应uname,但我们会抑制错误并将空响应作为我们的指示符。

case "$(uname -m 2>/dev/null)" in
  (armv7l)  DEVICE=Jolla ;;
  (aarch64) DEVICE=Android1 ;;
  ("")      DEVICE=Android2 ;;
  (*)       DEVICE=UNKNOWN ;;
esac

虽然我们可以参考软件版本号,但当操作系统更新时,这些版本号很可能会发生变化。在您当前的情况下,使用硬件信息更可靠,但如果您获得共享相同硬件架构的更多设备,则会引发误报。

答案2

另一种方法可能是在所有 Android 设备上安装 bash(例如 Termux 应用程序)并让脚本测试OSTYPEbash 变量:

一台 android 8.1 设备,OSTYPEbash 变量等于linux-android(参见下面的屏幕截图)

因此,区分的命令将是:

echo $OSTYPE | grep -q android && export osFamily=Android || export osFamily=$(uname -s)

在此输入图像描述

相关内容