264 votos

¿Cómo reemplazar las utilidades de Mac OS X por las utilidades básicas de GNU?

Encontré que hay algunas diferencias entre el comando de utilidad que usé en el Mac OSX y en el Linux. Quiero hacer mi experiencia unida.

¿Cómo podría reemplazar todas mis utilidades de Mac con utilidades de GNU?

2 votos

2 votos

Esta es una guía topbug.net/blog/2013/04/14/

24 votos

Simpatizo con sus frustraciones pero creo que, a largo plazo, causará mayor frustración si son sustituido - Después de buscar hacer lo mismo yo recomendaría usar homebrew como se menciona a continuación, y luego sólo aprender a utilizar las utilidades con un g ( gsed , greadlink etc.) en lugar de sustituir las utilidades del sistema.

308voto

Fuzzy Purple Monkey Puntos 702

Esto añade enlaces simbólicos para las utilidades GNU con el prefijo g a /usr/local/bin/ :

brew install coreutils findutils gnu-tar gnu-sed gawk gnutls gnu-indent gnu-getopt

Ver brew search gnu para otros paquetes. Si quieres usar los comandos sin el prefijo g, instala las fórmulas con --default-names (o --with-default-names si tu brew es más reciente), o añadir por ejemplo /usr/local/opt/coreutils/libexec/gnubin antes que otros directorios en su PATH .

$ brew info coreutils
coreutils: stable 8.21
http://www.gnu.org/software/coreutils
Depends on: xz
/usr/local/Cellar/coreutils/8.20 (208 files, 9.4M)
/usr/local/Cellar/coreutils/8.21 (210 files, 9.6M) *
https://github.com/mxcl/homebrew/commits/master/Library/Formula/coreutils.rb
==> Caveats
All commands have been installed with the prefix 'g'.

If you really need to use these commands with their normal names, you
can add a "gnubin" directory to your PATH from your bashrc like:

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

Additionally, you can access their man pages with normal names if you add
the "gnuman" directory to your MANPATH from your bashrc as well:

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

Puedes instalar GNU grep al tocar a los homebrew/dupes:

brew tap homebrew/dupes; brew install grep

9 votos

Por cierto, tengo una Fórmula Homebrew que actúa como un meta-paquete para todas esas grandes utilidades GNU: ver shiny-and-gnu.rb en github.com/al-the-x/homebrew-mine

1 votos

El primer PATH funciona, pero MANPATH falló, ¿por qué? ¿Es porque estoy usando OSX10.10? Hice eco de $MANPATH, y obtuve /usr/local/opt/coreutils/libexec/gnuman: Parece que el MANPATH original no estaba incluido. Después de comentar el MANPATH conf en mi bashrc, no tengo nada por ecoh $MANPATH . Y por supuesto, si uso man pwd Tengo el manual de BSD. ¿Cómo arreglar esto?

4 votos

Para findutils , es necesario añadir PATH="/usr/local/Cellar/findutils/4.4.2/bin:$PATH" que no se indica en la salida de la consola de instalación.

66voto

xuhdev Puntos 329

Además de brew install coreutils también puede necesitar instalar algunos otros paquetes, como gnu-sed , grep (algunos de los paquetes requieren que se ejecute brew tap homebrew/dupes primero):

brew install findutils --with-default-names
brew install gnu-indent --with-default-names
brew install gnu-sed --with-default-names
brew install gnutls
brew install grep --with-default-names
brew install gnu-tar --with-default-names
brew install gawk

El --default-names es opcional, encienda esto si realmente necesita usar estos comandos de GNU como predeterminados, o serán compilados con un g prefijo.

Referencia: http://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/

0 votos

Tenga en cuenta que brew install gawk (a diferencia de todos los demás) sustituirá a awk (a través de un enlace simbólico /usr/local/bin/awk ). Si desea mantener el original /usr/bin/awk , sólo rm /usr/local/bin/awk

0 votos

¿Existe una versión GNU de ping ¿disponible?

0 votos

@HappyFace No lo creo. En GNU/Linux, ping es una utilidad del núcleo de Linux: github.com/iputils/iputils

25voto

jwee Puntos 23

No estoy seguro de que recomendaría sustituyendo a sin embargo, puedes instalarlos en un camino diferente y utilizarlos de esa manera. En general, si vienes de Linux y quieres acceder a utilidades *nix más "genéricas", y un sistema similar a apt, entonces te recomiendo que busques en Macports: http://www.macports.org

Permite, por ejemplo, utilizar el último GCC "genérico", a diferencia de/además del GCC incluido de Apple, sólo como ejemplo.

3 votos

Por ejemplo, tar y zip de Mac OS X conocen los metadatos que las versiones de GNU no conocen.

1 votos

Hay aplicaciones suministradas por Apple, que no son más que interfaces gráficas de usuario para algunas herramientas de línea de comandos, y si las sustituyes las aplicaciones pueden empezar a comportarse de forma extraña, así que opta por añadir, no por sustituir.

0 votos

Cierto; algo como Macports los añade, no los sustituye.

13voto

Clay Freeman Puntos 131

He escrito un script para hacer exactamente esto! El script puede ser visto aquí (o por debajo). Sin embargo, no siempre puedo garantizar que esta publicación refleje la última versión del script enlazado anteriormente.

Al ejecutar el script, Homebrew se instalará (si no está ya), todas las utilidades GNU asociadas se instalarán (si no están ya), y el PATH se construirá a partir de las utilidades instaladas.

#!/bin/bash

# Install Homebrew (if not already installed)
ruby -e "$(curl -fsSL "\
"https://raw.githubusercontent.com/Homebrew/install/master/install)"

# Install required packages from Homebrew
brew tap homebrew/dupes
brew install coreutils binutils diffutils ed findutils gawk gnu-indent gnu-sed \
  gnu-tar gnu-which gnutls grep gzip screen watch wdiff wget bash gdb gpatch \
  m4 make nano file-formula git less openssh python rsync svn unzip vim \
  --default-names --with-default-names --with-gettext --override-system-vi \
  --override-system-vim --custom-system-icons

# Empty the .bash_path file that holds GNU paths
> ~/.bash_path

# Build PATH variable script in ~/.bash_path
for i in /usr/local/Cellar/*/*/bin; do
  echo 'export PATH="'$i':$PATH"' >> ~/.bash_path
done
for i in /usr/local/Cellar/*/*/libexec/gnubin; do
  echo 'export PATH="'$i':$PATH"' >> ~/.bash_path
done
for i in /usr/local/Cellar/*/*/share/man; do
  echo 'export MANPATH="'$i':$MANPATH"' >> ~/.bash_path
done
for i in /usr/local/Cellar/*/*/libexec/gnuman; do
  echo 'export MANPATH="'$i':$MANPATH"' >> ~/.bash_path
done

# Check if .bash_path is being called from .bash_profile
PATCH=`grep "~/.bash_path" ~/.bash_profile`
if [ "$PATCH" == "" ]; then
  # Add Ubuntu-style PS1 to .bash_profile
  cat <<EOF > ~/.bash_profile
export PS1="\[\033[1;32m\]\u@\h\[\033[0m\]:\[\033[1;34m\]\w\[\033[0m\]# "
EOF
  # Add .bash_path to .bash_profile
  echo "source ~/.bash_path" >> ~/.bash_profile
fi

3 votos

¿No te encantan los downvotes sin comentarios críticos? Gracias por el script.

0 votos

@JustinForce ¡No hay problema! Gracias por los comentarios.

3 votos

-1. Este scripts hace demasiada magia. Todos los .bash_path -manipular no es realmente necesario si sigues las respuestas de @user495470 y @xuhdev. Y el cambio de PS1 está completamente fuera del alcance de esta pregunta.

10voto

fabiomaia Puntos 161

He escrito un script que transforma de forma transparente la CLI de MacOS en una experiencia fresca de CLI de GNU/Linux mediante

  • instalación de los programas GNU que faltan
  • actualización de programas GNU obsoletos
  • sustituir los programas BSD preinstalados por su implementación GNU preferida
  • instalar otros programas comunes entre las distribuciones populares de GNU/Linux

https://github.com/fabiomaia/linuxify

git clone https://github.com/fabiomaia/linuxify.git
cd linuxify/
./linuxify install

También te permite deshacer todo fácilmente.

./linuxify uninstall

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X