Rufen Sie den OSX-Codenamen über die Befehlszeile ab
7
Gibt es eine Möglichkeit, den OSX-Codenamen (z. B. Yosemite, El Capitan usw.) über die Befehlszeile abzurufen? Ich suche keine Versionsinformationen (z
Ich denke, es gibt keinen zuverlässigen Weg, dies innerhalb von Bash (Terminal) zu tun. Sogar system_profiler(was eine ziemlich erschöpfende Reihe von Informationen ausspuckt) enthält diese Namen nicht (was Apple meiner Meinung nach als "Marketing-Version" bezeichnet). Vielleicht versuchen Sie, ein Problem zu lösen, indem Sie nach diesem Codenamen suchen? Wenn ja, seien Sie vorsichtig, dass Sie nicht in das XY-Problem fallen. • xyproblem.info
Sideshowbarker
1
Gibt es nicht nur zehn von ihnen? Warum nicht einfach die Versionsinformationen abrufen und mithilfe einer fest codierten Nachschlagetabelle übersetzen?
Wildcard
@wildcard: Das habe ich bisher gemacht, aber jedes Mal, wenn eine neue Version herauskommt, muss ich meine Bibliothek aktualisieren und neu verteilen ... Oder kennen Sie bereits die zukünftigen Namen?
lviggiani
Antworten:
5
Ich bin mir sicher, dass es einen einfacheren und zuverlässigeren Weg geben muss, aber zumindest können Sie die Pipe sedvollständig entfernen, indem Sie grepwith -o(druckt nur Übereinstimmungen) und -E(erweiterte reguläre Ausdrücke) verwenden:
grep -oE 'SOFTWARE LICENSE AGREEMENT FOR OS X.*[A-Z]' '/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf'
Dies gibt jedoch auch den SOFTWARE LICENSE AGREEMENT FOR OS XTeil der Ausgabe zurück. Wenn Sie nur den Codenamen möchten, können Sie ihn an sed weiterleiten, aber es wären keine Rückverweise unter Verwendung der gefürchteten -EFlagge erforderlich , für die BSD sedso berüchtigt ist:
grep -oE 'SOFTWARE LICENSE AGREEMENT FOR OS X.*[A-Z]' '/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf' | sed "s/SOFT.*OS X //"
Ich persönlich bevorzuge awkstattdessen die Methode:
grep -oE 'SOFTWARE LICENSE AGREEMENT FOR OS X.*[A-Z]' '/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf' | awk -F 'OS X ' '{print $NF}'
Reine awkLösung:
awk '/SOFTWARE LICENSE AGREEMENT FOR OS X/' '/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf' | awk -F 'OS X ' '{print $NF}' | awk '{print substr($0, 0, length($0)-1)}'
(Ich bin mir sicher, dass es eine Möglichkeit gibt, dies zu tun, ohne zusätzliche awk-Prozesse zu leiten, aber ich bin kein Profi.)
In mindestens macOS Sierra müssen Sie den Teil "OS X" aus diesen entfernen, da in der Zeile jetzt "SOFTWARE-LIZENZVEREINBARUNG FÜR macOS Sierra" steht. Der Dateiname bleibt jedoch dankenswerterweise derselbe.
Ecmanaut
1
FWIW, hier ist ein flüchtiger, hackiger Weg. es ist wahrscheinlich weder sehr vorwärts- noch rückwärtskompatibel:
grep "SOFTWARE LICENSE AGREEMENT FOR OS X" \
"/System/Library/CoreServices/Setup Assistant.app/Contents/Resources/en.lproj/OSXSoftwareLicense.rtf" \
| sed -E 's/^SOFTWARE LICENSE AGREEMENT FOR OS X (.+)\\$/\1/'
Es funktioniert zumindest auf den von mir überprüften El Capitan- und Mavericks-Systemen (und daher würde ich von Yosemite ausgehen). Es gibt den Marketingnamen in Großbuchstaben zurück. zB EL CAPITANund MAVERICKS.
In diesem Blogbeitrag habe ich erfahren, dass Apple über einen Webdienst verfügt, mit dem Sie den Marketingnamen von macOS für Versionen 10.7+ abfragen können. Sie können ihm die macOS-Versionsnummer geben, für die Sie den Marketingnamen benötigen, und es wird XML mit dem Marketingnamen zurückgegeben.
Es wurde nach einer konsistenten Methode zum Abrufen dieser Informationen in allen OS X-Versionen gesucht. Apple hat den Standort von: OSXSoftwareLicense.rtfin High Sierra verlegt. Anstatt reguläre Ausdrücke zu verwenden, um ein Ziel zu treffen, das sich bewegen könnte, habe ich Folgendes entwickelt:
#!/bin/bash
# Retrieve Apple's marketing name for installed operating system
# Take the number extracted from here; use it as a reference
osx_num=$(sw_vers -productVersion| awk -F '[.]' '{print $2}')
# Lookup table for OS X marketing names
OSX_MARKETING=(
["10"]="Yosemite"
["11"]="El Capitan"
["12"]="Sierra"
["13"]="High Sierra"
)
# Check if the number extracted is in array;
# if it is, print marketing name
osx_name () {
if [[ -n "${OSX_MARKETING[$osx_num]}" ]]; then
printf "%s\\n" "${OSX_MARKETING[$osx_num]}"
fi
}
Dies funktioniert zuverlässig auf den vier neuesten Versionen von OS X und wahrscheinlich auch auf anderen.
system_profiler
(was eine ziemlich erschöpfende Reihe von Informationen ausspuckt) enthält diese Namen nicht (was Apple meiner Meinung nach als "Marketing-Version" bezeichnet). Vielleicht versuchen Sie, ein Problem zu lösen, indem Sie nach diesem Codenamen suchen? Wenn ja, seien Sie vorsichtig, dass Sie nicht in das XY-Problem fallen. • xyproblem.infoAntworten:
Ich bin mir sicher, dass es einen einfacheren und zuverlässigeren Weg geben muss, aber zumindest können Sie die Pipe
sed
vollständig entfernen, indem Siegrep
with-o
(druckt nur Übereinstimmungen) und-E
(erweiterte reguläre Ausdrücke) verwenden:Dies gibt jedoch auch den
SOFTWARE LICENSE AGREEMENT FOR OS X
Teil der Ausgabe zurück. Wenn Sie nur den Codenamen möchten, können Sie ihn an sed weiterleiten, aber es wären keine Rückverweise unter Verwendung der gefürchteten-E
Flagge erforderlich , für die BSDsed
so berüchtigt ist:Ich persönlich bevorzuge
awk
stattdessen die Methode:Reine
awk
Lösung:(Ich bin mir sicher, dass es eine Möglichkeit gibt, dies zu tun, ohne zusätzliche awk-Prozesse zu leiten, aber ich bin kein Profi.)
quelle
FWIW, hier ist ein flüchtiger, hackiger Weg. es ist wahrscheinlich weder sehr vorwärts- noch rückwärtskompatibel:
Es funktioniert zumindest auf den von mir überprüften El Capitan- und Mavericks-Systemen (und daher würde ich von Yosemite ausgehen). Es gibt den Marketingnamen in Großbuchstaben zurück. zB
EL CAPITAN
undMAVERICKS
.quelle
In diesem Blogbeitrag habe ich erfahren, dass Apple über einen Webdienst verfügt, mit dem Sie den Marketingnamen von macOS für Versionen 10.7+ abfragen können. Sie können ihm die macOS-Versionsnummer geben, für die Sie den Marketingnamen benötigen, und es wird XML mit dem Marketingnamen zurückgegeben.
Rückgabe (für Anzeigezwecke formatiert)
Wenn Sie den Marketingnamen für die Version von macOS erhalten möchten, die Sie gerade ausführen, können Sie den einen Liner ausführen
quelle
http://support-sp.apple.com/
Methode funktioniert ab 10.13 nicht mehr.Wie wäre es damit :
quelle
Es wurde nach einer konsistenten Methode zum Abrufen dieser Informationen in allen OS X-Versionen gesucht. Apple hat den Standort von:
OSXSoftwareLicense.rtf
in High Sierra verlegt. Anstatt reguläre Ausdrücke zu verwenden, um ein Ziel zu treffen, das sich bewegen könnte, habe ich Folgendes entwickelt:Dies funktioniert zuverlässig auf den vier neuesten Versionen von OS X und wahrscheinlich auch auf anderen.
quelle