¿Reemplazar los comandos de shell de OS X con las versiones de Linux?

¿Reemplazar los comandos de shell de OS X con las versiones de Linux?

Los comandos disponibles de forma predeterminada en la Terminal en OS X no parecen comportarse como sus versiones de Linux. ¿Cómo puedo reemplazarlos todos con los comandos reales de GNU Linux?

Por ejemplo, sed -i requiere un molesto argumento "" adicional. Además, sólo funciona con archivos de texto. Esto es inútil.

Respuesta1

En el caso general, no puedes (ono debería) reemplaza los comandos predeterminados. La razón es que muchos scripts de administración del sistema y paquetes de terceros probablemente dependen de estos comandos para comportarse como lo hacen de fábrica en OS X.

Entonces, si simplemente borra los comandos del sistema y los reemplaza con equivalentes de GNU que tienen un comportamiento incompatible o argumentos de línea de comando, probablemente se romperá algo. Especialmente si utiliza algún software que fue "portado" a Mac OS X después de haber sido diseñado originalmente para ejecutarse en Linux o BSD, ya que es más probable que este tipo de programas dependan de scripts de shell y comandos del sistema en lugar de llamar a las API de OS X.

Lo que tupoderLo que hay que hacer es instalar un entorno que instale las utilidades GNU en otro directorio sin sobrescribir los valores predeterminados, y luegoajusta tu PATHvariable de entornopara que dé prioridad a los comandos que se encuentran dentro del directorio GNU incluso antes de buscar en los directorios del sistema. Puede configurar esto para que solo establezca su RUTA de esa manera si está iniciando un shell interactivo; puedes buscar en Google cómo hacer esto basho hacer otra pregunta en SU ​​(o buscarla, ya que probablemente ya se haya preguntado antes) si quieres hacerlo.

Un ejemplo de tal entorno escerveza caseraque por ejemplo tiene GNU sedentre otras cosas. Una vez que haya instalado Homebrew, puede escribir

brew install coreutils

e instalar elGNU Coreutils. Estos le proporcionarán sed, date, y muchas otras herramientas que se incluyen con GNU/Linux, pero no con OS X. Sin embargo, para no "anular" los archivos binarios predeterminados printfde wcOS X, tendrán el prefijo gpredeterminado. Entonces, después de instalar Coreutils, si desea usar GNU sed, escriba

gsed

Si es demasiado complicado escribirlo cada vez, puede agregar un directorio "gnubin" a su RUTA y simplemente llamar a GNU sed con sed. Deberá agregar lo siguiente a su ~/.bash_profile:

PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"

Por supuesto, si necesita un entorno Linux completo (kernel, X11, compatibilidad con syscall, etc.), tendrá que ejecutar Linux en una máquina virtual, comoVirtualBox. Esta es una apuesta segura si necesita ejecutar software o scripts diseñados para ejecutarse en Linux.

Homebrew sólo le brindará compatibilidad con ciertas clases de programas que no requieren un comportamiento específico de Linux. Por ejemplo inotify, sólo está disponible en Linux. drm(Direct Rendering Manager) solo está disponible en Linux. Hay algunas otras llamadas al sistema de bajo nivel que sólo están disponibles en Linux y para las cuales no existe ningún equivalente en OS X, por lo que portar ciertos programas de Linux a OS X puede resultar poco práctico o imposible sin cambios significativos en el código.

Respuesta2

Podrías usar unPrefijo Gentooque es compatible con OS X, puedes hacerlo mediantearrancandoloy luego agregar las rutas relevantes en el directorio de prefijos a su RUTA. Puede ser que esto ya lo haga por ti. Una vez hecho esto, puede utilizar los comandos estándar de Gentoo para instalar paquetes.

emerge coreutilsobtendrá las utilidades estándar de GNU, por ejemplo.

Tenga en cuenta que Gentoo compila de forma predeterminada, es posible que deseeconfigurar un host binarioen cambio. Esto es simplemente usar una de las URL de la segunda mitad de ese artículo y colocarla PORTAGE_BINHOST="... your url here ..."en ./etc/make.confsu prefijo.

Respuesta3

Como seguimiento de la publicación de @allquixotic, aquí están las instrucciones oficiales porbrew install coreutils

Todos los comandos se han instalado con el prefijo 'g'.

Si realmente necesita usar estos comandos con su nombre normal, puede agregar un directorio "gnubin" a su RUTA desde su bashrc como

PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"

Además, también puede acceder a sus páginas de manual con nombres normales, el directorio "gnuman" de su MANPATH desde su bashrc.

MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"

Respuesta4

Con respecto a sedusted puede descargar un binario precompilado desde elRudixproyecto. Para más Rudixpaquetes veraquíyaquí.

información relacionada