Я знаю, что я могу использовать sw_ver
, чтобы найти эту информацию:
ProductName: Mac OS X
ProductVersion: 10.14
BuildVersion: 18A353d
… и я знаю, что могу найти другие вещи, например, uname
может дать мне некоторые типы информации об ОС и system_profiler SPSoftwareDataType
может дать мне дополнительную информацию, но я хочу найти «дружественное» имя, такое как «Мохаве» на изображении, показанном выше.
Как найти «дружественное» имя, используя shell/Terminal/bash/etc?
До сих пор мой Google fu не смог найти никаких решений. Все результаты, кажется, возвращаются к тем командам, которые я упомянул выше, но ни одна из них не дает мне правильной информации.
Он должен быть где-то там… как его найти?
Эта команда должна найти то, что вы ищете:
awk '/SOFTWARE LICENSE AGREEMENT FOR macOS/' '/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf' | awk -F 'macOS ' '{print $NF}' | awk '{print substr($0, 0, length($0)-1)}'
Он основан на ответе, найденном здесь . Он протестирован для работы в High Sierra и должен работать в Мохаве.
Вы также можете сделать это онлайн (что на самом деле заполняет диалоговое окно «Об этом Mac», показанное в вопросе):
curl -s https://support-sp.apple.com/sp/product?edid=$( sw_vers -productVersion ) | xmllint --format -xpath "//root/configCode/text()" -
Эта команда запросит у сервера Apple версию вашего продукта и извлечет имя ОС из XML-ответа. Чтобы увидеть полный XML-ответ, просто опустите --xpath "//root/configCode/text()"
параметр:
curl -s https://support-sp.apple.com/sp/product?edid=$( sw_vers -productVersion ) | xmllint --format -
Ответ:
<?xml version="1.0" encoding="utf-8"?>
<root>
<name>CPU Name</name>
<configCode>macOS High Sierra</configCode>
<locale>en_US</locale>
</root>
VER="$(sw_vers -productVersion)"; curl -s "http://support-sp.apple.com/sp/product?edid=$VER"
https
, поскольку Apple будет игнорировать соединения без SSL. Я также добавил xmllint
фильтр для извлечения данных, которые вы ищете.$ curl -s https://support-sp.apple.com/sp/product?edid=$( sw_vers -productVersion )
возвращается <?xml version="1.0" encoding="utf-8" ?><root><error>0900</error><locale>en_US</locale></root>
на 10.13.6 (и любое другое значение, которое я там использую)$ curl -s "https://support-sp.apple.com/sp/product?edid=10.13.6"
Не работает, но curl -s "https://support-sp.apple.com/sp/product?edid=10.12.6"
работает!!!Что ж, я, наконец, отказался от поиска решения — возможно, мы найдем его после того, как Mojave выйдет в финальной версии, но, очевидно, это будет не то, что можно легко использовать в старых версиях Mac OS X / OS X / macOS.
Поэтому я сделал альтернативу идее Марка Уилсона (см. выше) и создал сценарий оболочки, который может либо вывести полный список всех номеров версий и их «понятных имен», либо позволит вам искать конкретное имя, например, если вы просто хотите знать, какая версия называлась «Йосемити».
Вы можете найти мой скрипт здесь: https://github.com/tjluoma/macosxnames/blob/master/macosxnames.sh
Я оставлю вопрос открытым на случай, если мы найдем решение, не требующее внешнего сценария.
Apple теперь поддерживает веб-страницу со всеми именами и соответствующими номерами: https://support.apple.com/en-us/HT201260 .
Вы можете получить список, используя это:
(echo "<table>" ; curl -sfLS "https://support.apple.com/en-us/HT201260" \
| tidy --tidy-mark no --char-encoding utf8 --wrap 0 --show-errors 0 --show-warnings no --clean yes --force-output yes --output-xhtml yes --quiet yes \
| sed -e '1,/<table/d; /<\/table>/,$d' -e 's#<br />##g' ; echo "</table>" ) \
| lynx -dump -nomargins -width='10000' -assume_charset=UTF-8 -pseudo_inlines -stdin -nonumbers -nolist
Дает этот вывод:
macOS Latest version
macOS Monterey 12.4
macOS Big Sur 11.6.7
macOS Catalina 10.15.2
macOS Mojave 10.14.6
macOS High Sierra 10.13.6
macOS Sierra 10.12.6
OS X El Capitan 10.11.6
OS X Yosemite 10.10.5
OS X Mavericks 10.9.5
OS X Mountain Lion 10.8.5
OS X Lion 10.7.5
Mac OS X Snow Leopard 10.6.8
Mac OS X Leopard 10.5.8
Mac OS X Tiger 10.4.11
Mac OS X Panther 10.3.9
Mac OS X Jaguar 10.2.8
Mac OS X Puma 10.1.5
Mac OS X Cheetah 10.0.4
Опять же, Apple не очень хорошо поддерживает документацию в Интернете, поэтому через год или два она может исчезнуть.
sw_vers
разобрав переменные и сравнив их со списком. Github: github.com/JayRizzo/JayRizzoTools/blob/master/pyMacOsName.pyset _delim to AppleScript's text item delimiters
set AppleScript's text item delimiters to "."
set os_version to the second item of (the text items of (do shell script "sw_vers -productVersion"))
set AppleScript's text item delimiters to _delim
set osList to { "Puma", "Cheetah", "Jaguar", "Panther", "Tiger", "Leopard", "Snow Leopard",¬
"Lion", "Mountain Lion", "Mavericks", "Yosemite", "El Capitan", "Sierra", "High Sierra"}
return item (os_version+1) of osList
Это пример.
set os_version to (do shell script "sw_vers -productVersion | awk -F. '{print $2}'")
Марк Уилсон
bmike
sw_ver
это маркетинговое название явно должно исходить от этой команды. Я провел много поисков в поисках этого, и я предполагаю, что вам понадобится очень непрямой способ получить это из установленных обновлений с именем.Марк Уилсон