¿Cómo puedo encontrar el “nombre descriptivo” del sistema operativo desde el shell/Terminal/bash?

Acerca de esta Mac con la palabra "Mojave" en un círculo

Sé que puedo usar sw_verpara encontrar esta información:

ProductName:    Mac OS X
ProductVersion: 10.14
BuildVersion:   18A353d

… y sé que puedo encontrar otras cosas, como que unameme pueden dar algunos tipos de información sobre el sistema operativo y system_profiler SPSoftwareDataTypeme 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?

Señalando que la respuesta correcta sería simplemente recuperar el número a través de cualquier método y tener su propia tabla de búsqueda para el nombre.
Estoy presentando un radar en contra sw_verya 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.
¿Por qué? Es fácil de determinar, todos los nombres son conocidos y todo lo que tiene que hacer es indexarlos en una lista. Proporciono un Applescript (malo) a continuación.

Respuestas (3)

Método fuera de línea

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.

Método en línea

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>
Desafortunadamente, me da "High Sierra" como salida en mi máquina Mojave. La palabra 'Mojave' no aparece en el archivo.
también, desde ese mismo enlace, alguien sugirió esto, que tampoco funciona (no devuelve nada):VER="$(sw_vers -productVersion)"; curl -s "http://support-sp.apple.com/sp/product?edid=$VER"
Probablemente se deba a que aún no han actualizado el archivo para Mojave. Parece que el servicio en línea ya no funciona porque no consigo que responda a ninguna consulta. Ese tomará más excavación
Pude hacer funcionar el segundo. Lo necesita https, ya que Apple ignorará las conexiones que no sean SSL. También agregué el xmllintfiltro para extraer los datos que estás buscando.
No tengo una máquina anterior a Sierra para verificar, pero ¿no fallaría el método "fuera de línea" anterior, anterior a Sierra? No se llamaba a sí mismo "macOS" antes de eso. No soy partidario de las soluciones en las que se requiere que la máquina tenga conexión a Internet.
@MarcWilson: esta respuesta se escribió teniendo en cuenta el nuevo macOS y superior. Si quieres El Capitan y versiones anteriores, cámbialo a "OS X"
Recibo un error '0900': $ 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í)
@johnnyB: lo acabo de probar y funciona bien por mi parte. ¿Estás usando un Hackintosh, tal vez?
¡entonces 10.13.6 no funciona! $ 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!!!
@Allan, el método en línea no es consistente. Vea mis nuevas preguntas en apple.stackexchange.com/questions/341551/…

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.

Actualización (más de un año después)

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.

Gracias por esta lista. stackoverflow.com/a/72722226/1896134 Actualicé esto y creé un script de python a partir de esto para buscar y comparar versiones dinámicamente. Ahora puedo obtener el nombre del sistema operativo en python al analizarlo sw_versen vars y compararlo con la lista. Github: github.com/JayRizzo/JayRizzoTools/blob/master/pyMacOsName.py
set _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.

El script de hecho resuelve el propósito, pero no es escalable. Tendrá que actualizarse con cada versión principal de macOS. La intención parece ser descubrir un mecanismo integrado en macOS (o usar la información integrada en el sistema operativo) que pueda revelar el nombre comercial del lanzamiento.
@NimeshNeema, sin embargo, es la única solución que da la respuesta correcta
Siempre que esté pagando, puede usar lo siguiente para reemplazar las primeras 4 líneas de su secuencia de comandos:set os_version to (do shell script "sw_vers -productVersion | awk -F. '{print $2}'")
De verdad, si fuera a hacer eso, lo haría todo en awk. :) Me gusta awk.