Obtenha o codinome OSX na linha de comando

7

Existe uma maneira de obter o nome de código OSX (ou seja, Yosemite, El Capitan, etc) a partir da linha de comando? Não estou procurando por informações de versão (por exemplo,

sw_vers -productVersion

) que dá 10,10 etc Obrigado!

    
por lviggiani 05.10.2015 / 21:30

5 respostas

5

Tenho certeza de que deve haver uma maneira mais fácil e confiável, mas pelo menos você pode eliminar o canal para sed usando grep com -o (somente impressões corresponde) e -E (expressões regulares estendidas):

grep -oE 'SOFTWARE LICENSE AGREEMENT FOR OS X.*[A-Z]' '/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf'

Isso, no entanto, também retorna a parte SOFTWARE LICENSE AGREEMENT FOR OS X da saída. Se você quer apenas o codinome, você poderia canalizá-lo para sed, mas não exigiria nenhuma referência para trás usando o dreaded -E flag que BSD sed é tão famoso por:

grep -oE 'SOFTWARE LICENSE AGREEMENT FOR OS X.*[A-Z]' '/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf' | sed "s/SOFT.*OS X //"

Pessoalmente, prefiro o método awk :

grep -oE 'SOFTWARE LICENSE AGREEMENT FOR OS X.*[A-Z]' '/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf' | awk -F 'OS X ' '{print $NF}'

Pure awk solution:

awk '/SOFTWARE LICENSE AGREEMENT FOR OS X/' '/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf' | awk -F 'OS X ' '{print $NF}' | awk '{print substr($0, 0, length($0)-1)}'

(Tenho certeza que há uma maneira de fazer isso sem canalizar para processos awk adicionais, mas eu não sou um profissional.)

    
por 06.10.2015 / 04:33
1

FWIW, aqui está um jeito feio e hacky; provavelmente não é muito compatível nem retrocompatível:

grep "SOFTWARE LICENSE AGREEMENT FOR OS X" \
  "/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf" \
  | sed -E 's/^SOFTWARE LICENSE AGREEMENT FOR OS X (.+)\$//'

Funciona pelo menos nos sistemas El Capitan e Mavericks que eu verifiquei (e, portanto, eu diria que no Yosemite). Ele retorna o nome de marketing em todas as letras maiúsculas; por exemplo, EL CAPITAN e MAVERICKS .

    
por 06.10.2015 / 04:03
1

De esta postagem do blog , aprendi que a Apple tem um serviço da Web em que você pode consultar o nome de marketing do macOS para as versões 10.7+. Você pode fornecê-lo com o número da versão do macOS para o qual você precisa do nome de marketing e ele retornará XML com o nome de marketing.

curl -s http://support-sp.apple.com/sp/product?edid=10.12.6

Retorna (formatado para fins de exibição)

<?xml version="1.0" encoding="utf-8" ?>
<root>
    <name>CPU Name</name>
    <configCode>macOS Sierra</configCode>
    <locale>en_US</locale>
</root>

Se você deseja obter o nome de marketing para a versão do macOS que você está executando no momento, você pode executar o forro um

curl -s http://support-sp.apple.com/sp/product?edid=$(sw_vers -productVersion) |
xmllint --xpath '/root/configCode/text()' -
    
por 10.08.2017 / 04:20
1

Que tal isso:

$ sed -nE '/SOFTWARE LICENSE AGREEMENT FOR/s/([A-Za-z]+ ){5}|\$//gp' /System/Library/CoreServices/Setup\ Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf
    
por 25.07.2018 / 18:16
0

Lutou por uma maneira consistente de recuperar essas informações nas versões do OS X. A Apple mudou a localização de: OSXSoftwareLicense.rtf em High Sierra. Em vez de usar expressões regulares para acertar um alvo que possa se mover, planejei o seguinte:

#!/bin/bash
# Retrieve Apple's marketing name for installed operating system 

# Take the number extracted from here; use it as a reference

osx_num=$(sw_vers -productVersion| awk -F '[.]' '{print $2}')

# Lookup table for OS X marketing names 

OSX_MARKETING=(
["10"]="Yosemite"
["11"]="El Capitan"
["12"]="Sierra"
["13"]="High Sierra"
)

# Check if the number extracted is in array; 
# if it is, print marketing name

osx_name () {
  if [[ -n "${OSX_MARKETING[$osx_num]}" ]]; then 
    printf "%s\n" "${OSX_MARKETING[$osx_num]}"
fi
}

Isso funciona de forma confiável nas quatro versões mais recentes do OS X e provavelmente em outras.

    
por 23.07.2018 / 17:56

Tags