Los comandos disponibles por defecto en la Terminal en OS X, no parecen comportarse como sus versiones de Linux. ¿Cómo puedo reemplazarlos todos con los comandos GNU linux reales?
Por ejemplo, sed -i requiere un argumento "" adicionalmente molesto. Además, solo funciona con archivos de texto. Esto es inútil
linux
macos
command-line
terminal.app
linux-terminal
El único
fuente
fuente

-ibandera no es estándar .edes para editar archivos.Respuestas:
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
PATHvariable 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; puedebashbuscar 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,
sedentre otras cosas. Una vez que haya instalado Homebrew, puede escribire instale los GNU Coreutils . Estos le proporcionará
sed,date,printf,wcy 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 prefijogpor defecto. Entonces, después de instalar Coreutils, si desea usar GNU sed, escribaSi 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: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,
inotifysolo 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.fuente
brew install coreutilsno incluyesed.brew install gnu-sedSin embargo, puede hacer estogsedy no se instalased, incluso si actualiza su$PATH. Creé un enlace simbólico para ocultar Macsed:ln -s $(which gsed) $(brew --prefix coreutils)/libexec/gnubin/sedsin embargo, aún debe hacerloman gsedpara ver la página de manual correcta.brew install gnu-sed --default-nameslo instalará comosed--default-names, puede instalar con los comandos con prefijo g y luego instalar oh-my-zsh (muy recomendable) y habilitar el complemento gnu-utils.Puede usar un Prefijo Gentoo que sea compatible con OS X, puede hacerlo arrancando y luego agregando las rutas relevantes en el directorio de prefijos a su RUTA. Puede ser que esto ya lo haga por ti. Después de hacerlo, puede usar los comandos estándar de Gentoo para instalar paquetes.
emerge coreutilsobtendrá las utilidades GNU estándar, por ejemplo.Tenga en cuenta que Gentoo compila de manera predeterminada, es posible que desee configurar un host binario en su lugar. Esto es sólo el uso de una de las direcciones URL en la segunda mitad de dicho artículo, y colocándolo en
PORTAGE_BINHOST="... your url here ..."en./etc/make.confen su prefijo.fuente
Como seguimiento de la publicación de @ allquixotic, aquí están las instrucciones oficiales por
brew install coreutilsfuente
Con respecto a
sedusted, puede descargar un binario precompilado delRudixproyecto. Para másRudixpaquetes ver aquí y aquí .fuente