Jak znaleźć „przyjazną nazwę” systemu operacyjnego na podstawie powłoki / terminala / bash?

4

O tym Macu z zaznaczonym słowem „Mojave”

Wiem, że mogę używać sw_ver, aby znaleźć informację:

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

… I wiem, że mogę znaleźć inne rzeczy, takie jak unameinformacje o systemie operacyjnym, i system_profiler SPSoftwareDataTypedodatkowe informacje, ale chcę znaleźć „przyjazną” nazwę, na przykład „Mojave” na powyższym obrazku.

Jak znaleźć „przyjazną” nazwę, używając powłoki / Terminal / bash / etc?

Do tej pory mój Google fu nie znalazł żadnych rozwiązań. Wszystkie wyniki wydają się wracać do poleceń, o których wspomniałem powyżej, ale żadne z nich nie daje mi właściwych informacji.

Musi gdzieś tam być… jak mogę to znaleźć?

TJ Luoma
źródło
1
Wskazując, że poprawną odpowiedzią byłoby po prostu pobranie numeru dowolną metodą i posiadanie własnej tabeli odnośników dla nazwy.
Marc Wilson,
1
Zgłaszam radar, sw_verponieważ ta nazwa marketingowa powinna być wyraźnie wysłana z tego polecenia. Wiele tego szukałem i przypuszczam, że będziesz potrzebować bardzo skośnego sposobu, aby uzyskać to z zainstalowanych aktualizacji o nazwie.
bmike
1
Dlaczego? Można to łatwo ustalić, wszystkie nazwy są znane i wszystko, co musisz zrobić, to zindeksować listę. Poniżej przedstawiam (zły) skrypt jabłkowy.
Marc Wilson,

Odpowiedzi:

3

Metoda offline

To polecenie powinno znaleźć to, czego szukasz:

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

Opiera się na znalezionej tutaj odpowiedzi . Jest przetestowany do pracy w High Sierra i powinien działać w Mojave.

Metoda online

Możesz to również zrobić online (to właśnie wypełnia okno dialogowe „Informacje o tym komputerze Mac” pokazane w pytaniu):

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

To polecenie sprawdzi serwer Apple z twoją wersją poduct i wyodrębni nazwę systemu operacyjnego z odpowiedzi XML. Aby zobaczyć pełną odpowiedź XML, po prostu pomiń --xpath "//root/configCode/text()"opcję:

curl -s https://support-sp.apple.com/sp/product?edid=$( sw_vers -productVersion ) | xmllint --format  -

Odpowiedź; reakcja; reagowanie; odzew; oddźwięk:

<?xml version="1.0" encoding="utf-8"?>
<root>
   <name>CPU Name</name>
   <configCode>macOS High Sierra</configCode>
   <locale>en_US</locale>
</root>
Allan
źródło
Niestety daje mi „High Sierra” jako wyjście na mojej maszynie Mojave. Słowo „Mojave” nie pojawia się w pliku.
TJ Luoma,
również z tego samego linku ktoś zasugerował to, co również nie działa (nic nie zwraca): VER="$(sw_vers -productVersion)"; curl -s "http://support-sp.apple.com/sp/product?edid=$VER"
TJ Luoma
1
Prawdopodobnie dlatego, że nie zaktualizowali jeszcze pliku Mojave. Wydaje się, że usługa online już nie działa, ponieważ nie mogę uzyskać odpowiedzi na żadne zapytanie. Ten zajmie więcej kopania
Allan
Udało mi się uruchomić drugi. Potrzebujesz, httpsponieważ Apple zignoruje połączenia inne niż ssl. Dodałem również xmllintfiltr, aby wyodrębnić dane, których szukasz.
Allan,
1
Nie mam maszyny sprzed Sierra, ale nie sprawdzę, czy powyższa metoda „offline” zawiodła, sprzed Sierra? Wcześniej nie nazywał się „macOS”. Nie jestem fanem rozwiązań, w których maszyna musi mieć połączenie z Internetem.
Marc Wilson,
1
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

To jest przykład.

Marc Wilson
źródło
2
Skrypt rzeczywiście rozwiązuje ten cel, ale nie jest skalowalny. Będzie musiał być aktualizowany przy każdej głównej wersji systemu macOS. Wydaje się, że intencją jest znalezienie mechanizmu wbudowanego w macOS (lub wykorzystanie informacji wbudowanych w system operacyjny), które mogą ujawnić nazwę marketingową tego wydania.
Nimesh Neema,
1
@NimeshNeema jest to jednak jedyne rozwiązanie, które daje prawidłową odpowiedź
Mark
Dopóki korzystasz z ostrzału, możesz użyć następujących set os_version to (do shell script "sw_vers -productVersion | awk -F. '{print $2}'")
poleceń,
Naprawdę, gdybym to zrobił, zrobiłbym to wszystko w awk. :) Lubię awk.
Marc Wilson,
0

Cóż, w końcu zrezygnowałem z szukania rozwiązania - być może znajdziemy je po tym, jak Mojave osiągnie ostateczną wersję, ale oczywiście nie będzie to coś, co z łatwością zastosuje na starszych wersjach Mac OS X / OS X / macOS.

Dlatego stworzyłem alternatywę dla pomysłu Marca Wilsona (powyżej) i stworzyłem skrypt powłoki, który może albo wypisać pełną listę wszystkich numerów wersji i ich „przyjaznych nazw”, albo pozwoli ci wyszukać konkretną nazwę, na przykład: jeśli chcesz tylko wiedzieć, która wersja nazywała się „Yosemite”.

Mój skrypt możesz znaleźć tutaj: https://github.com/tjluoma/macosxnames/blob/master/macosxnames.sh

Pozostawię pytanie otwarte na wypadek, gdybyśmy znaleźli rozwiązanie, które nie wymaga zewnętrznego skryptu.

TJ Luoma
źródło