Получить кодовое имя OSX из командной строки

Есть ли способ получить кодовое имя OSX (Ie Yosemite, El Capitan и т. Д.) Из командной строки? Я не ищу информацию о версии (например,

sw_vers -productVersion 

), который дает 10.10 и т.д. Спасибо!

Я уверен, что должен быть более простой и надежный способ, но, по крайней мере, вы можете полностью исключить этот канал, используя grep с -o (только для распечаток) и -E (расширенные регулярные выражения):

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

Это, однако, также возвращает SOFTWARE LICENSE AGREEMENT FOR OS X часть вывода. Если вы просто хотите кодовое имя, вы можете передать его в sed, но не потребует каких-либо обратных ссылок, используя флаг страшного -E который BSD sed настолько печально известен:

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

Лично я предпочитаю метод awk :

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

Чистое решение awk :

 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)}' 

(Я уверен, что есть способ сделать это, не подключаясь к дополнительным awk-процессам, но я не профессионал.)

FWIW, вот неуклюжий хакерский путь; это, вероятно, не очень-то наоборот:

 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 (.+)\\$/\1/' 

Он работает, по крайней мере, на системах El Capitan и Mavericks, которые я проверил (и поэтому я бы взял на себя Йосемити). Он возвращает маркетинговое имя во всех кепках; например, EL CAPITAN и EL CAPITAN .

Из этого сообщения в блоге я узнал, что у Apple есть веб-сервис, на который вы можете запросить маркетинговое имя macOS для версий 10.7+. Вы можете предоставить его с номером версии macOS, для которого требуется маркетинговое имя, и оно вернет XML с маркетинговым именем.

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

Возвращает (отформатирован для отображения)

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

Если вы хотите получить маркетинговое имя для версии macOS, которую вы сейчас используете, вы можете запустить один лайнер

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