5 votes

Sortie de "${OSTYPE:6}" sur les anciennes versions de Mac OS X

Je suis en train d'écrire un shell script que je veux théoriquement compatible avec de très anciennes versions de Mac OS X (je dis "théoriquement", parce que je manque de machines super anciennes avec lesquelles faire des tests). Le script utilise la sortie de ${OSTYPE:6} pour déterminer sur quelle version de Mac OS X il fonctionne.

Sur une machine exécutant 10.13 High Sierra, echo ${OSTYPE:6} renvoie à 17 . Sur une machine exécutant la version 10.10 Yosemite, le résultat est le suivant 14 . La logique veut donc que la commande émette "15" le 10.11 et "16" le 10.12.

(C'est utile, car cela me permet d'inclure des lignes comme if [[ ${OSTYPE:6} -ge 14 ]]; then DoThing; fi à exécuter DoThing sur tout système exécutant Yosemite et plus récent).

Ce schéma s'applique-t-il également aux anciennes versions ? Par exemple, la commande renverrait-elle "4" sur la version originale 10.0 ?

Je pose la question parce que, eh bien, il serait étrange de commencer à 4, donc je crains que quelque part dans l'histoire, le nombre ait été incrémenté par une mise à jour du point.

1 votes

Pour certaines versions plus anciennes, il renvoie une paire de chiffres en pointillés. Sous OS X 10.6.8 j'obtiens "10.0", et sous OS X 10.3.9 j'obtiens "7.0". Malheureusement, cela signifie que bash On ne peut pas faire de comparaisons numériques dans ces versions.

0 votes

@GordonDavisson Ugh, merci pour l'info ! J'ai maintenant fait le contrôle d'une manière beaucoup moins propre. if (( $(echo "${OSTYPE:6} > 13" | bc -l) )); then DoThing; fi

6voto

Tetsujin Points 95239

On dirait bien que ça renvoie la version Darwin.

Votre théorie fonctionne bien depuis 10.15 Mojave [18] jusqu'à 10.2 Jaguar [6] mais échoue avant cela, car Darwin était 1.x.x à ce moment-là.

La liste complète se trouve à l'adresse suivante Wikipedia - MacOS

3voto

Sur une machine exécutant 10.13 High Sierra, echo ${OSTYPE:6} renvoie 17...

Voici un vieux PowerMac G5 fonctionnant sous OS X 10.5 vers 2009 :

$ bash --version
GNU bash, version 3.2.17(1)-release (powerpc-apple-darwin9.0)

$ sh --version
GNU bash, version 3.2.17(1)-release (powerpc-apple-darwin9.0)

$ echo ${OSTYPE:6}
9.0

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.5.8
BuildVersion:   9L31a

$ system_profiler SPSoftwareDataType
Software:

    System Software Overview:

      System Version: Mac OS X 10.5.8 (9L31a)
      Kernel Version: Darwin 9.8.0
      Boot Volume: Macintosh HD
      Boot Mode: Normal
      Computer Name: PowerMac
      User Name: Jeffrey (jwalton)
      Time since boot: 66 days 3:46

Je n'ai jamais utilisé if [[ ${OSTYPE:6} -ge 14 ]]; then DoThing; fi . Cependant, j'ai utilisé des éléments similaires dans les scripts shell scripts et les Makefiles :

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

Je peux fournir un accès SSH à distance au PowerMac. Je l'utilise pour tester des bibliothèques open source, comme Crypto++ et OpenSSL. Envoyez-moi un courriel à noloader, compte gmail si vous voulez y accéder.

Pour autant que je sache, la plus ancienne version de Bash sur laquelle vous pouvez mettre la main pour la tester est Bash 2.x circa 2004. Téléchargez Fedora 1 à partir de /pub/archive/fedora/linux/core .

0 votes

Merci. Je n'accepterai pas l'offre de ssh pour le moment, je ne suis pas tout à fait Je ne me suis pas assez investi dans ce projet, mais j'apprécie vraiment !

0 votes

Question générale : le fait de laisser un système d'exploitation obsolète accessible via SSH ne vous pose-t-il pas de problème de sécurité ? Avez-vous fait quelque chose de spécial pour renforcer le système ?

1 votes

@Wowfunhappy - La boîte est en grande partie à l'abri des attaquants de réseau. La boîte est située derrière mon pare-feu IPFire. Le seul port accessible au monde extérieur est SSH. SSH est mis à jour régulièrement ; et je maintiens Construire scripts pour ce scénario. L'attaquant local peut faire plus de dégâts. Mais les personnes ayant un compte sur la boîte n'ont pas à travailler trop dur, car je suis heureux de leur offrir un accès Root s'ils le demandent ou en ont besoin.

2voto

Mark Points 563

Je n'ai pas de machine 10.0 à tester, mais sur des machines 10.3 et 10.5, echo ${OSTYPE:6} renvoie une ligne blanche ( $OSTYPE sur les deux est darwin ) ; sur 10.6, il renvoie 10.0 .

(Incidemment, votre shell script devrait invoquer explicitement bash . Le shell par défaut sur les très anciennes versions d'OSX est tcsh qui ne comprend pas le ${OSTYPE:6} syntaxe.)

1voto

Oskar Points 1242

Apple stocke les informations de version dans Core Foundation et voici le code source montrant comment ils construisent à chaque version.

J'utiliserais sw_vers pour obtenir vos informations de version si vous utilisez un script plutôt que d'utiliser uname ou d'autres variables.

0 votes

Serait-ce sw_vers travailler dans un shell script ?

0 votes

Il est dans le chemin de tous les shells de livraison sur MacOS / OS X / Darwin, donc oui @Wowfunhappy il fonctionnera bien.

0 votes

Merci. Je me souviens pourquoi je ne l'ai pas utilisé maintenant - parce qu'il ne sort pas un entier comme OSTYPE:6 je ne peux pas utiliser un simple contrôle -ge / -le pour isoler "cette version et tout ce qui est plus récent/ancien".

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X