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źć tę 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źć?


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>

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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.