Rosetta 2 上とかで古い Node.js 経由とかでシェルスクリプトを呼び出した場合、 Rosetta 2 を使用している状態が引き継がれます。
その状態で、 uname -a
とかすると、 Intel Mac と同様に x86_64
を返してしまいます。
それだと困るケースがあったので、ハードウェアのアーキテクチャを取得する方法。
といっても簡単で、 uname -v
すれば OK です。
$ uname -v Darwin Kernel Version 21.2.0: Sun Nov 28 20:28:41 PST 2021; root:xnu-8019.61.5~1/RELEASE_ARM64_T6000 $ arch -x86_64 zsh $ uname -v Darwin Kernel Version 21.2.0: Sun Nov 28 20:28:41 PST 2021; root:xnu-8019.61.5~1/RELEASE_ARM64_T6000
上が M1 Mac で直接実行した場合、下が M1 Mac で Rosetta 2 経由で実行した場合。
共に ARM64
でビルドされていることが分かるので、そこで判定すれば OK。
ちなみに Intel Mac の場合は、 RELEASE_X86_64_XXXXXX
になっていたりします。