Estou tentando escrever um script que determinará ações com base na arquitetura da máquina. Eu já uso uname -m
para reunir a linha de arquitetura, no entanto eu não sei quantas arquiteturas ARM existem, nem sei se é armhf
, armel
ou arm64
.
Como este é necessário para esse script para determinar se partes do script pode ser executado ou não, eu estou tentando encontrar uma maneira simples para determinar se a arquitetura é armhf
, armel
ou arm64
. Existe alguma one-liner ou comando simples que pode ser usado para a saída tanto armhf
, armel
ou arm64
?
O script foi escrito especificamente para os sistemas Debian e Ubuntu, e eu estou marcando isso com isso em mente (ele sai automaticamente se você não estiver em uma dessas distros, mas isso pode ser aplicado de uma maneira muito mais ampla também, se o comando (s) existe)
EDIT: Recentemente, aprendi que o armel está morto, e os construtores de software arm64 (PPA ou virtual) não são os mais estáveis. Então, eu tenho uma pesquisa curinga encontrando arm*
e assumindo armhf, mas ainda é necessário descobrir um liner que retorne um dos três - seja um comando Ubuntu / Debian ou uma chamada do kernel ou algo assim.
fonte
case $(arch) in ; armf)... ;; armel)... ;; arm64)... ;; *) exit ;; esac
você meen algo assim?i386
,i686
ex86_64
casos baseados emuname -m
, mas nada paraarm??
... ou, pelo menos, nada que identificaarmhf
,armel
ouarm64
) .uname -m
cospe a placa do braço específica -armv7l
por exemplo. Ele não diz explicitamente se éarmel
,armhf
ouarm64
- que é o que eu preciso$(arch)
terminar para eliminar arquiteturas incompatíveis de SO.Respostas:
produzirá a arquitetura principal da máquina em que é executada. Isso ocorrerá
armhf
em uma máquina executando o ARM Debian de 32 bits ou Ubuntu (ou um derivado),arm64
em uma máquina executando o ARM de 64 bits.Observe que a arquitetura em execução pode ser diferente da arquitetura do hardware ou mesmo da arquitetura do kernel. É possível rodar o
i386
Debian em uma CPU Intel ou AMD de 64 bits, e acredito que seja possível rodararmhf
em uma CPU ARM de 64 bits. É até possível ter principalmentei386
binários (então a arquitetura principal éi386
) em umamd64
kernel ...fonte