EDIT0 :我有3部智能手机:
一款Jolla1智能手机,配有SailfishOS v3 + Alien和2款安卓智能手机。
我希望能够在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在我的第一部安卓智能手机上通过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在我的第二部安卓智能手机上通过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内核+ Mer项目软件分发的真正Linux (最后一次是从停产的MeeGo Linux发行版中分叉出来的)。
发布于 2019-11-30 15:20:57
您可以从uname -m获得三个不同的响应并利用它。
我们期望设备在没有uname的情况下出现故障响应,但是我们会抑制错误并以空响应作为我们的指示。
case "$(uname -m 2>/dev/null)" in
(armv7l) DEVICE=Jolla ;;
(aarch64) DEVICE=Android1 ;;
("") DEVICE=Android2 ;;
(*) DEVICE=UNKNOWN ;;
esac虽然我们可以参考软件版本号,但当操作系统被更新时,它们很可能会改变。在当前的情况下,使用硬件信息更可靠,但如果您得到更多共享相同硬件架构的设备,则会导致误报。
发布于 2019-12-03 13:57:33
另一种方法可以是在所有安卓设备上安装bash (例如Termux ),并让脚本测试OSTYPE bash变量:
其中一个是Android8.1设备,OSTYPE bash变量等于linux-android (见下面的屏幕截图)
因此,要区分的命令是:
echo $OSTYPE | grep -q android && export osFamily=Android || export osFamily=$(uname -s)
https://unix.stackexchange.com/questions/554813
复制相似问题