なつねこメモ

主にプログラミング関連のメモ帳 ♪(✿╹ヮ╹)ノ 書いてあるコードは自己責任でご自由にどうぞ。記事本文の無断転載は禁止です。

M1 Mac の Rosetta 2 を使用している状態でハードウェアアーキテクチャを取得したい

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 になっていたりします。