Bash en Linux vs Mac OS

27

Estoy comprando un iMac. He estado trabajando en Linux durante mucho tiempo y hago un montón de secuencias de comandos bash. Me preguntaba si todos los comandos y características de bash están disponibles en Mac OS. ¿Alguien tiene alguna experiencia con scripting de Mac bash? Agradezco tu aporte.

alex
fuente

Respuestas:

32

Bash en sí será casi igual. Habrá algunas pequeñas diferencias, pero ninguna de ellas afectará la portabilidad de sus scripts.

El principal problema es que los coreutils de MacOS están basados ​​en FreeBSD, mientras que las utilidades a las que estás acostumbrado son muy probablemente del proyecto GNU. Los coreutils de FreeBSD no siempre son compatibles con los coreutils de GNU. Existen diferencias de rendimiento y comportamiento entre las versiones GNU y FreeBSD de sed , grep , ps y otras utilidades .

Puede instalar los coreutils de GNU pero tienen g-prefijos (por ejemplo, gcatfor cat). No es una buena idea reemplazar los coreutils de MacOS con los coreutils de GNU.

Comunidad
fuente
66
Debería amplificarse que el uso de las utilidades centrales estándar basadas en FreeBSD puede afectar la portabilidad de sus scripts (por ejemplo, pstiene diferentes indicadores, como lo hace grep). Me golpeé la cabeza contra la pared un par de veces tratando de entender por qué mi script Ubuntu no estaba produciendo la misma salida en mi Mac.
Chris Gregg
1
Si desea escribir sus scripts para que sean portátiles, www2.opengroup.org/ogsys/jsp/publications/mainPage.jsp es un excelente lugar para obtener las especificaciones estrictamente estándar para las utilidades y comandos POSIX y XCU.
kojiro
@ChrisGregg: estoy de acuerdo. He agregado un poco a mi respuesta para enfatizar que hay incompatibilidades entre los dos conjuntos de herramientas.
5

Si es importante, bashen Mac OS X Mountain Lion sigue siendo la versión 3.2. La mayoría de las distribuciones de Linux en estos días se envían con 4.x, por lo que se perderán las características de la versión 4. En la actualidad, la versión 4.2.45 está disponible en Homebrew como solución alternativa. No sé qué versión hay en Mavericks, no estoy seguro de que alguien que lo sepa pueda decir todavía.

Como lo mencionaron otros, bashes lo mismo bash(aparte de las versiones ya mencionadas) pero Mac OS X usa un (en su mayoría) tierra de usuario BSD. Muchas de las utilidades del sistema estándar tienen opciones ligeramente diferentes o se comportan de manera ligeramente diferente. Desafortunadamente, son demasiado numerosos para enumerarlos aquí.

bahamat
fuente
2
4 años después, bash en High Sierra todavía usa: GNU bash, versión 3.2.57 (1) -release (x86_64-apple-darwin17) Copyright (C) 2007 Free Software Foundation, Inc.
Nate Lockwood
4

Instale homebrew (un administrador de paquetes) y luego instale las versiones gnu de algunas utilidades básicas:

$ brew install coreutils
$ brew install gnu-sed

Después de cada instalación, mostrará los pasos que puede seguir para que simplemente pueda llamar en datelugar de, gdatepor ejemplo, para que pueda seguir usando sus scripts de bash de Linux sin ninguna modificación.

Felicitaciones, acaba de resolver el 99% de sus problemas de secuencias de comandos multiplataforma.

Decano
fuente
3
Por otro lado, si sus scripts están destinados a ser portátiles, querrá corregir los scripts, no los síntomas.
tripleee
2

Una cosa que puede ser frustrante al venir de Linux a una Mac es que no hay /procun sistema de pseudoarchivos. Esto ha roto algunos de mis scripts de Linux, y puede ser complicado encontrar formas adecuadas de obtener la misma información que encuentra en procsu script de bash de Mac.

Chris Gregg
fuente
0

Soy un usuario 'principalmente Linux, Mac ocasional' y encuentro que:

bash, ~/.bashrcy ~/.bash_aliasessobre todo funcionan igual.

Un problema que encontré fue que uno de los comandos para cambiar el indicador de color no funcionaba en la Mac. De esa y otras experiencias he aprendido a mantener una ventana de terminal abierta e iniciada sesión al configurar mi .bashrcarchivo. Eso fue lo que puedo probar 'nueva ventana' y encontrar cualquier error en el que todavía está conectado.

Michael Durrant
fuente