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
-i
bandera no es estándar .ed
es 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
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; puedebash
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 escribire 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 prefijog
por 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,
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.fuente
brew install coreutils
no incluyesed
.brew install gnu-sed
Sin embargo, puede hacer estogsed
y 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/sed
sin embargo, aún debe hacerloman gsed
para ver la página de manual correcta.brew install gnu-sed --default-names
lo 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 coreutils
obtendrá 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.conf
en su prefijo.fuente
Como seguimiento de la publicación de @ allquixotic, aquí están las instrucciones oficiales por
brew install coreutils
fuente
Con respecto a
sed
usted, puede descargar un binario precompilado delRudix
proyecto. Para másRudix
paquetes ver aquí y aquí .fuente