編集0:私は3つのスマートフォンを持っています:
SailfishOS v3 + Alien Dalvikを搭載したJolla1スマートフォンと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
2番目の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)
ところで:セールフィッシュOSLinuxカーネルをベースとした実際のLinuxです。 +Merプロジェクトソフトウェアの配布(最後は廃止された製品です。ミゴLinuxディストリビューション)
答え1
uname -m
これから離れて活用できる3つの異なる応答があります。
デバイスはエラーなしで失敗応答をエクスポートすると予想しますuname
が、エラーを抑制し、空の応答をインジケータとして使用します。
case "$(uname -m 2>/dev/null)" in
(armv7l) DEVICE=Jolla ;;
(aarch64) DEVICE=Android1 ;;
("") DEVICE=Android2 ;;
(*) DEVICE=UNKNOWN ;;
esac
ソフトウェアのバージョン番号を参照できますが、これらのバージョン番号は、オペレーティングシステムが更新されると変更される可能性があります。現時点では、ハードウェア情報を使用する方がより安定していますが、同じハードウェアアーキテクチャを共有するデバイスが多いほど、誤検出が発生する可能性があります。