En el caso general, no puede (o no debe ) reemplazar los comandos predeterminados en absoluto. La razón es que muchas secuencias de comandos de administración del sistema y paquetes de terceros probablemente se basan en estos comandos para comportarse de la manera en que funcionan de manera predeterminada en OS X.
Entonces, si simplemente borra los comandos del sistema y los reemplaza con equivalentes GNU que tienen un comportamiento incompatible o argumentos de línea de comando, probablemente romperá algo. Especialmente si usa 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 dependa de scripts de shell y comandos del sistema en lugar de llamar a las API de OS X.
Lo que puede hacer es instalar un entorno que instale las utilidades GNU en otro directorio sin sobrescribir los valores predeterminados, y luego ajustar su PATH
variable de entorno para que le dé prioridad a los comandos que se encuentran dentro del directorio GNU incluso antes de buscar en los directorios del sistema. Puede conectar esto para que solo establezca su RUTA de esa manera si está iniciando un shell interactivo; puede bash
buscar en Google cómo hacer esto o hacer otra pregunta en SU (o buscarlo, ya que probablemente ya se le haya preguntado antes) si desea hacerlo.
Un ejemplo de dicho entorno es Homebrew que, por ejemplo, tiene GNU, sed
entre otras cosas. Una vez que haya instalado Homebrew, puede escribir
brew install coreutils
e instale los GNU Coreutils . Estos le proporcionará sed
, date
, printf
, wc
y muchas otras herramientas que se incluyen con GNU / Linux, pero no OS X. Sin embargo, a fin de no "override" binarios OS X por defecto, van a tener el prefijo g
por defecto. Entonces, después de instalar Coreutils, si desea usar GNU sed, escriba
gsed
Si esto es demasiado complicado de escribir 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 desde sopas hasta nueces (kernel, X11, compatibilidad con syscall, etc.) tendrá que ejecutar Linux en una máquina virtual, como VirtualBox . Esta es una apuesta segura si necesita ejecutar software o scripts diseñados para ejecutarse en Linux.
Homebrew solo le brindará compatibilidad para ciertas clases de programas que no requieren un comportamiento específico de Linux. Por ejemplo, inotify
solo está disponible en Linux. drm
(Direct Rendering Manager) solo está disponible en Linux. Hay algunas otras llamadas de sistema de bajo nivel que solo están disponibles en Linux, y para las cuales no existe un equivalente en OS X, por lo que portar ciertos programas de Linux a OS X puede ser poco práctico o imposible sin cambios significativos en el código.