Puis-je obtenir le nom animal OSX du terminal, au lieu de la version uniquement?

1

D'autres questions ont porté sur l'obtention du nom numérique de la version actuelle d'OSX, c'est-à-dire avec "sw_vers -productVersion". Cependant, je ne connais aucun moyen d’obtenir le nom du mot animal, comme Lion, Mavericks, etc. Ce mot n'apparaît pas dans Apple / À propos de ce mac.

AnneTheAgile
la source
Pourquoi aurais-tu besoin de ça? Il n'y a pas beaucoup de versions, il serait donc trivial d'ajouter un mappage du numéro de version et du nom à un script.
slhck
@slhck, peut-être que je suis plus vieux que toi :). J'ai d'abord obtenu OSX avec la première version et je ne me souviens déjà plus lequel était lequel. Beaucoup de documents n'utilisent que l'une ou l'autre notation. Je trouve cela incroyablement déroutant et les scripts que je peux écrire / lire pour me déconfuser m'aident beaucoup!
AnneTheAgile

Réponses:

1

Je vais vous donner deux alternatives. Les deux ont (quelques) inconvénients, mais ils fonctionnent et répondent à votre question.

Première solution: créez un script bash contenant les noms des animaux. L'inconvénient est que vous devez ajouter manuellement une entrée si une nouvelle version apparaît. Mais c'est (seulement) une fois tous les 2 ans environ.

#!/bin/bash
# Check if bahs supports arrays (only recently added)
test[0]='test' || (echo 'Failure: arrays not supported in this version of bash.' && exit 2)

versions=( "1.0" "10.0" "10.1" "10.2" "10.3" "10.4" "10.5" "10.6" "10.7" "10.8" "10.9" "10.10" )
animals=( "Hera" "Cheetah" "Puma" "Jaguar" "Panther" "Tiger" "Leopard" "Snow Leopard" "Lion" "Mountain Lion" "Mavericks" "Yosemite" )
length=${#versions[@]}
thisversion=`sw_vers | grep -E "ProductVersion" | grep -o '[0-9]*\.[0-9]*' | head -1`
count=0

while [ "${versions[count]}" != "$thisversion" ] && [ "$count" -le "$length" ]
do
    count=$(( $count + 1 ))
done

echo "Your OS X's version animal name is : ${animals[count]}"

Deuxième solution: essayez d’utiliser les informations disponibles. Wikipédia et forger un script one-liner-bash qui obtient le nom de l'animal. Vous aurez besoin d'une version de travail de grep , boucle , html2text (Je l'ai installé en utilisant brasser ), sw_vers , tête et awk . Voici sa méchanceté royale:

curl -s http://en.wikipedia.org/wiki/OS_X | html2text -nobs -ascii | grep -E '^ (Mac _)? OS_X. [0-9] {4}. '| grep -f & lt; (sw_vers | grep "ProductVersion" | grep -o '[0-9] . [0-9] '| tête -1) | awk '{print $ 2}'

Une petite explication:

  • Obtenez la page Wikipedia en utilisant boucle
  • Convertissez-le en ascii en utilisant html2text
  • Isolez la table avec la version OS X de la page Wikipedia à l'aide de grep
  • ensuite grep la table avec la version d'OS X que vous utilisez
  • Votre version d'OS X vient de sw_vers , lequel est double- grep ed et tête ed pour isoler le numéro de version à 2 chiffres
  • Enfin, la deuxième colonne du tableau Wikipedia est affichée (espérons qu’ils conservent les noms d’animaux dans cette colonne) en utilisant awk

Longue histoire courte: peut-on le faire? Oui . Est-ce robuste et sans entretien? Non .

agtoever
la source
Merci @agtoever! Peut-être que plus tard cette page Wikipedia aura un accès Wikidata / Wikimedia, alors je pense que l'analyse fonctionnera facilement. // édite il existe wiki.dbpedia.org par stackoverflow.com/questions/990079/…
AnneTheAgile
2

Alors que je cherchais une solution à ce problème, je suis tombé sur ce blog: https://erikberglund.github.io/2016/Apple_Product_Marketing_Name_Query/

En tant que résumé rapide de l'article de blog (au cas où il disparaîtrait), Apple dispose d'un service Web sur lequel vous pouvez interroger le nom marketing de macOS pour les versions 10.7+. Vous pouvez lui fournir le numéro de version macOS pour lequel vous avez besoin du nom de marketing et renverra XML avec le nom de marketing.

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

Retours (formatés pour l'affichage)

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

Si vous souhaitez obtenir le nom marketing de la version de macOS que vous exécutez actuellement, vous pouvez exécuter le liner

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

Notez que depuis novembre 2017, Apple a forcé l'utilisation de https plus de http pour ce service.

n8felton
la source
1
1.Je me demande / puis-je / devrais-je changer pour accepter cette réponse? c'est vraiment génial! ; 2. La doublure de mon terminal est imprimée sur les caractères d'invite de ligne. Donc, pour clarifier le résultat, j'ai ajouté un écho factice, à savoir: curl -s support-sp.apple.com/sp/product?edid=$(sw_vers -productVersion) | xmllint --xpath '/ root / configCode / text ()' -; écho ""
AnneTheAgile
1

Les noms d'animaux sont à des fins de marketing uniquement. L'exécution d'un terminal et la création de requêtes n'aboutissent qu'à des références numériques, un peu comme le langage est limité à la terminologie Unix.

Thomas
la source