Frage:
Ausgabe von "$ {OSTYPE: 6}" unter alten Versionen von Mac OS X.
Wowfunhappy
2019-06-19 22:05:32 UTC
view on stackexchange narkive permalink

Ich schreibe ein Shell-Skript, das theoretisch mit sehr alten Versionen von Mac OS X kompatibel sein soll (ich sage "theoretisch", weil mir super alte Maschinen fehlen, mit denen ich tatsächlich testen kann). Das Skript verwendet die Ausgabe von $ {OSTYPE: 6} , um zu bestimmen, auf welcher Version von Mac OS X es ausgeführt wird.

Auf einem Computer mit 10.13 High Sierra gibt echo $ {OSTYPE: 6} 17 zurück. Auf einem Computer mit 10.10 Yosemite wird 14 zurückgegeben. Die Logik schlägt daher vor, dass der Befehl am 10.11. "15" und am 10.12. "16" ausgeben würde.

(Dies ist nützlich, da ich damit Zeilen wie einfügen kann, wenn [[$ {OSTYPE: 6} -ge 14]]; dann DoThing; fi , um DoThing auszuführen Code> auf jedem System, auf dem Yosemite und höher ausgeführt wird.)

Gilt dieses Muster auch für alte Releases? Würde der Befehl beispielsweise "4" auf dem ursprünglichen 10.0 zurückgeben?

Ich frage, weil es seltsam wäre, mit 4 zu beginnen, also mache ich mir Sorgen, dass die Zahl irgendwo in der Geschichte durch eine Punktaktualisierung erhöht wurde.

Bei einigen älteren Versionen wird ein gepunktetes Zahlenpaar zurückgegeben.Unter OS X 10.6.8 erhalte ich "10.0" und unter OS X 10.3.9 bekomme ich "7.0".Leider bedeutet dies, dass "bash" in diesen Versionen keine numerischen Vergleiche durchführen kann.
@GordonDavisson Ugh, danke für das Heads-up!Ich habe die Prüfung jetzt viel weniger sauber gemacht `if (($ (echo" $ {OSTYPE: 6}> 13 "| bc -l)));dann DoThing;fi`
Vier antworten:
#1
+6
Tetsujin
2019-06-19 22:13:21 UTC
view on stackexchange narkive permalink

Das klingt sehr nach der Rückgabe der Darwin-Version.

Ihre Theorie funktioniert gut von 10.15 Mojave [18] bis 10.2 Jaguar [6], scheitert aber vorher, da Darwin zu diesem Zeitpunkt 1.x.x war.

Eine vollständige Liste finden Sie unter Wikipedia - macOS

#2
+3
user83961
2019-06-20 07:51:24 UTC
view on stackexchange narkive permalink

Auf einem Computer mit 10.13 High Sierra gibt echo $ {OSTYPE: 6} 17 ...

zurück

Hier ist ein alter PowerMac G5 mit OS X 10.5 um 2009:

  $ bash --version
GNU Bash, Version 3.2.17 (1) -Veröffentlichung (PowerPC-Apple-Darwin9.0)

$ sh --version
GNU Bash, Version 3.2.17 (1) -Veröffentlichung (PowerPC-Apple-Darwin9.0)

$ echo $ {OSTYPE: 6}
9.0

$ sw_vers
Produktname: Mac OS X.
Produktversion: 10.5.8
BuildVersion: 9L31a

$ system_profiler SPSoftwareDataType
Software:

    Übersicht über die Systemsoftware:

      Systemversion: Mac OS X 10.5.8 (9L31a)
      Kernel-Version: Darwin 9.8.0
      Startvolumen: Macintosh HD
      Startmodus: Normal
      Computername: PowerMac
      Benutzername: Jeffrey (jwalton)
      Zeit seit dem Start: 66 Tage 3:46
 

Ich habe nie verwendet, wenn [[$ {OSTYPE: 6} -ge 14]]; dann DoThing; fi . Allerdings habe ich in Shell-Skripten und Makefiles Folgendes verwendet:

  IS_OLD_DARWIN = $ (system_profiler SPSoftwareDataType 2> / dev / null | grep -i -c -E "OS X 10 \. [0-5]")
if [["$ IS_OLD_DARWIN" -ne 0]]; dann DoThing; fi
 

Ich kann SSH-Fernzugriff auf den PowerMac gewähren. Ich benutze es zum Testen von Open Source-Bibliotheken wie Crypto ++ und OpenSSL. Senden Sie mir eine E-Mail an noloader, Google Mail-Konto , wenn Sie Zugriff wünschen.

Soweit ich weiß, ist Bash 2.x um 2004 die älteste Version von Bash, die Sie zum Testen in die Hände bekommen können. Laden Sie Fedora 1 von / pub / archive / fedora / linux / core a herunter >.

Vielen Dank!Ich werde Sie jetzt nicht auf das SSH-Angebot ansprechen - ich bin diesem Projekt nicht * ganz * genug gewidmet -, aber ich weiß es wirklich zu schätzen!
Allgemeine Frage: Haben Sie keine Sicherheitsbedenken, ein veraltetes Betriebssystem über SSH zugänglich zu machen?Haben Sie etwas Besonderes getan, um das System zu härten?
@Wowfunhappy - Die Box ist vor Netzwerkangreifern größtenteils sicher.Die Box befindet sich hinter meiner IPFire-Firewall.Der einzige nach außen zugängliche Port ist SSH.SSH wird regelmäßig aktualisiert.und ich verwalte [Build Scripts] (https://github.com/noloader/Build-Scripts) für dieses Szenario.Der lokale Angreifer kann mehr Schaden anrichten.Aber Leute mit Konten auf der Box müssen nicht zu hart arbeiten, da ich ihnen gerne Root-Zugriff anbiete, wenn sie danach fragen oder es brauchen.
#3
+2
Mark
2019-06-20 07:15:42 UTC
view on stackexchange narkive permalink

Ich habe keinen 10.0-Computer zum Testen, aber auf 10.3- und 10.5-Computern gibt echo $ {OSTYPE: 6} eine leere Zeile zurück ( $ OSTYPE )auf beiden ist darwin );In 10.6 wird 10.0 zurückgegeben.

(Im Übrigen müsste Ihr Shell-Skript explizit bash aufrufen. Die Standard-Shell in sehr alten OSX-Versionen ist tcsh , die den $ {OSTYPE: 6} -Syntax.)

#4
+1
bmike
2019-06-19 22:24:42 UTC
view on stackexchange narkive permalink

Apple speichert Versionsinformationen in Core Foundation. Hier ist der Quellcode, der zeigt, wie sie zu jeder Version erstellt werden.

Ich würde sw_vers verwenden, um Ihre Versionsinformationen abzurufen, wenn Sie Skripte erstellen, anstatt uname oder andere Variablen zu verwenden.

Würde `sw_vers` in einem Shell-Skript funktionieren?
Es befindet sich auf dem Weg aller Versand-Shells unter macOS / OS X / Darwin, also ja, @Wowfunhappy, es wird gut funktionieren.
Vielen Dank.Ich erinnere mich, warum ich das jetzt nicht verwendet habe - da es keine Ganzzahl wie "OSTYPE: 6" ausgibt, kann ich keine einfachen -ge / -le-Prüfungen verwenden, um "diese Version und alles neuere / ältere" zu isolieren.
@Wowfunhappy Sind die Build-Zahlen nicht monoton ansteigend und als Strings sortierbar?Ich denke, es gibt eine ganze Python-Bibliothek / ein ganzes Python-Modul, um dieses iirc zu handhaben - es sind Pyfakte - https://github.com/timsutton/python-macadmin-tools
Ah, Finlay Doobie, der einen Fehler in OS X behoben hat, der Apples Softwareentwicklern über ein Jahr lang entgangen ist - https://www.wired.com/2002/03/apple-ousts-coder-for-being-young/
Woah @fd0 Ich hatte keine Ahnung von der Bekanntheit.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 4.0-Lizenz, unter der er vertrieben wird.
Loading...