Sé que puedo usar sw_ver
para encontrar esta información:
ProductName: Mac OS X
ProductVersion: 10.14
BuildVersion: 18A353d
… y sé que puedo encontrar otras cosas, como que uname
me pueden dar algunos tipos de información sobre el sistema operativo y system_profiler SPSoftwareDataType
me pueden dar información adicional, pero quiero encontrar el nombre “amigable”, como “Mojave” en la imagen que se muestra arriba.
¿Cómo puedo encontrar el nombre "amigable", usando el shell/Terminal/bash/etc?
Hasta ahora, mi Google fu no ha podido encontrar ninguna solución. Todos los resultados parecen volver a los comandos que mencioné anteriormente, pero ninguno de ellos me da la información correcta.
Tiene que estar ahí en alguna parte... ¿cómo puedo encontrarlo?
Este comando debería encontrar lo que estás buscando:
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)}'
Se basa en la respuesta que se encuentra aquí . Está probado para funcionar en High Sierra y debería funcionar en Mojave.
También puede hacer esto en línea (que en realidad es lo que completa el cuadro de diálogo "Acerca de esta Mac" que se muestra en la pregunta):
curl -s https://support-sp.apple.com/sp/product?edid=$( sw_vers -productVersion ) | xmllint --format -xpath "//root/configCode/text()" -
Este comando consultará el servidor de Apple con la versión de su producto y extraerá el nombre del sistema operativo de la respuesta XML. Para ver la respuesta XML completa, simplemente omita la --xpath "//root/configCode/text()"
opción:
curl -s https://support-sp.apple.com/sp/product?edid=$( sw_vers -productVersion ) | xmllint --format -
Respuesta:
<?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
, ya que Apple ignorará las conexiones que no sean SSL. También agregué el xmllint
filtro para extraer los datos que estás buscando.$ curl -s https://support-sp.apple.com/sp/product?edid=$( sw_vers -productVersion )
regresa <?xml version="1.0" encoding="utf-8" ?><root><error>0900</error><locale>en_US</locale></root>
el 10.13.6 (y cualquier otro valor que use allí)$ curl -s "https://support-sp.apple.com/sp/product?edid=10.13.6"
Falla pero curl -s "https://support-sp.apple.com/sp/product?edid=10.12.6"
funciona!!!Bueno, finalmente dejé de buscar una solución; tal vez encontremos una después de que Mojave llegue a su versión final, pero obviamente no será algo que se use fácilmente en versiones anteriores de Mac OS X / OS X / macOS.
Así que hice una alternativa a la idea de Marc Wilson (arriba) y creé un script de shell que puede generar una lista completa de todos los números de versión y sus "nombres descriptivos" o le permitirá buscar un nombre específico, por ejemplo, si solo quiere saber qué versión se llamó "Yosemite".
Puede encontrar mi script aquí: https://github.com/tjluoma/macosxnames/blob/master/macosxnames.sh
Dejaré la pregunta abierta en caso de que encontremos una solución que no requiera un script externo.
Apple ahora mantiene una página web con todos los nombres y números correspondientes: https://support.apple.com/en-us/HT201260
Puedes obtener la lista usando esto:
(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
Dará esta salida:
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
Por otra parte, a Apple no le gusta mucho mantener la documentación en línea, por lo que puede desaparecer en uno o dos años.
sw_vers
en vars y compararlo con la lista. 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
Ese es un ejemplo.
set os_version to (do shell script "sw_vers -productVersion | awk -F. '{print $2}'")
marc wilson
bmike
sw_ver
ya que este nombre comercial claramente debería emitirse desde ese comando. He investigado mucho en busca de esto y supongo que necesitará una forma muy oblicua de obtener esto de las actualizaciones instaladas con el nombre.marc wilson