5 votos

Salida de "${OSTYPE:6}" en versiones antiguas de Mac OS X

Estoy escribiendo un shell script que quiero que sea teóricamente compatible con versiones muy antiguas de Mac OS X (digo "teóricamente", porque me faltan máquinas superantiguas con las que hacer pruebas). El script utiliza la salida de ${OSTYPE:6} para determinar en qué versión de Mac OS X se está ejecutando.

En una máquina con 10.13 High Sierra, echo ${OSTYPE:6} devuelve 17 . En una máquina con 10.10 Yosemite, devuelve 14 . La lógica sugiere, por tanto, que el comando emitiría "15" en 10.11 y "16" en 10.12.

(Esto es útil, porque me permite incluir líneas como if [[ ${OSTYPE:6} -ge 14 ]]; then DoThing; fi para correr DoThing en cualquier sistema que ejecute Yosemite y más reciente).

¿Esta pauta se aplica también a las versiones antiguas? Por ejemplo, ¿el comando devolvería "4" en la 10.0 original?

Lo pregunto porque, bueno, sería raro empezar en 4, así que me preocupa que en algún momento de la historia, el número se haya incrementado por una actualización de puntos.

1 votos

En algunas versiones antiguas, devuelve un par de números con puntos. En OS X 10.6.8 obtengo "10.0", y en OS X 10.3.9 obtengo "7.0". Lamentablemente, eso significa que bash no puede realizar comparaciones numéricas en estas versiones.

0 votos

@GordonDavisson ¡Uf, gracias por el aviso! Ahora he hecho la comprobación mucho menos limpia if (( $(echo "${OSTYPE:6} > 13" | bc -l) )); then DoThing; fi

6voto

Tetsujin Puntos 23061

Eso suena muy bien para devolver la versión de Darwin.

Tu teoría funciona bien desde 10.15 Mojave [18] hasta 10.2 Jaguar [6] pero falla antes de eso, ya que Darwin era 1.x.x en ese momento.

Hay una lista completa en Wikipedia - MacOS

3voto

jww Puntos 520

En una máquina con 10.13 High Sierra, echo ${OSTYPE:6} devuelve 17...

Aquí hay un viejo PowerMac G5 con OS X 10.5 alrededor de 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

Nunca he utilizado if [[ ${OSTYPE:6} -ge 14 ]]; then DoThing; fi . Sin embargo, he utilizado algo similar a esto en shell scripts y 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

Puedo proporcionar acceso remoto SSH al PowerMac. Lo uso para probar bibliotecas de código abierto, como Crypto++ y OpenSSL. Envíame un correo electrónico a noloader, cuenta de gmail si quieres acceder.

Hasta donde yo sé, la versión más antigua de Bash que puedes tener en tus manos para probar es Bash 2.x alrededor de 2004. Descargue Fedora 1 desde /pub/archivo/fedora/linux/core .

0 votos

Gracias. No voy a aceptar la oferta de ssh en este momento, no estoy bastante dedicado lo suficiente a este proyecto, pero se lo agradezco de verdad.

0 votos

Pregunta general: ¿no te preocupa la seguridad de dejar un sistema operativo obsoleto accesible a través de SSH? ¿Ha hecho algo especial para endurecer el sistema?

1 votos

@Wowfunhappy - La caja está casi siempre a salvo de los atacantes de la red. La caja está detrás de mi firewall IPFire. El único puerto accesible al mundo exterior es SSH. SSH se actualiza regularmente; y mantengo Construir scripts para este escenario. El atacante local puede hacer más daño. Pero la gente con cuentas en la caja no tiene que trabajar demasiado, ya que estoy feliz de ofrecerles el acceso Root si lo piden o lo necesitan.

2voto

Kevin J. Rice Puntos 103

No tengo una máquina 10.0 para probar, pero sí en máquinas 10.3 y 10.5, echo ${OSTYPE:6} devuelve una línea en blanco ( $OSTYPE en ambos es darwin ); en 10.6, devuelve 10.0 .

(Por cierto, su shell script tendría que invocar explícitamente bash . El shell por defecto en versiones muy antiguas de OSX es tcsh que no entiende el ${OSTYPE:6} sintaxis).

1voto

Oskar Puntos 1242

Apple almacena la información de la versión en Core Foundation y aquí está el código fuente que muestra cómo se construye a cada versión.

Yo usaría sw_vers para obtener la información de su versión si está haciendo un script en lugar de usar uname u otras variables.

0 votos

¿Podría sw_vers trabajar en un shell script?

0 votos

Está en la ruta de todos los shells de envío en MacOS / OS X / Darwin, así que sí @Wowfunhappy funcionará bien.

0 votos

Gracias. Recuerdo por qué no usé esto ahora-porque no da salida a un entero como OSTYPE:6 No puedo usar una simple comprobación -ge / -le para aislar "esta versión y todo lo más nuevo/antiguo".

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X