Simpatizo con sus frustraciones, pero creo que, a largo plazo, causará una mayor frustración si se reemplazan . Después de intentar hacer lo mismo, recomendaría usar homebrewcomo se menciona a continuación, y luego aprender a usar las utilidades con un g( gsed, greadlink, etc) en lugar de la sustitución de las utilidades del sistema.
No estoy de acuerdo con @cwd, el uso --with-default-namessolo afecta al usuario local. Podría ser un problema con las utilidades de terminal orientadas a Mac, pero si usa homebrew para todo, también podría pretender que está usando Linux. Mezclado con iterm2, funciona muy bien para mí, básicamente puedo fingir que estoy en casa con mis cajas de Linux.
Ray Foss
Respuestas:
210
Esto agrega enlaces simbólicos para utilidades GNU con el prefijo g para /usr/local/bin/:
Ver brew search gnupara otros paquetes. Si desea utilizar los comandos sin el prefijo ag, agregue, por ejemplo, /usr/local/opt/coreutils/libexec/gnubinantes de otros directorios en su PATH.
$ brew info coreutils
coreutils: stable 8.21
http://www.gnu.org/software/coreutilsDepends 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==>CaveatsAll 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"
El primer PATH funciona, pero MANPATH falló, ¿por qué? ¿Es porque estoy usando OSX10.10? Me hice eco de $ MANPATH, y obtuve /usr/local/opt/coreutils/libexec/gnuman:, parece que MANPATH original no estaba incluido. Después de comentar el conf de MANPATH en mi bashrc, no conseguí nada ecoh $MANPATH. Y, por supuesto, si lo uso man pwd, obtuve el manual BSD. ¿Cómo arreglar esto?
Zen
2
Para findutils, debe agregar lo PATH="/usr/local/Cellar/findutils/4.4.2/bin:$PATH"que no se indica en la salida de la consola de instalación.
Sridhar Sarnobat
1
Además, para obtener la página de manual adecuada para findutils, agregue esto a su$MANPATH/usr/local/opt/findutils/share/man
Christian Long
1
@Zen: la manera correcta para iniciar MANPATHel fin de mantener el valor por defecto del sistema es: MANPATH="/usr/local/opt/coreutils/libexec/gnuman:${MANPATH-/usr/share/man}". La clave está en la construcción ${var-default_value}.
dan
50
Además brew install coreutils, es posible que tenga que instalar otros paquetes, como por ejemplo gnu-sed, grep:
Tenga en cuenta que la --with-default-namesopción se elimina desde enero de 2019, por lo que cada binario debe agregarse a la ruta si se van a usar sin el gprefijo.
Tenga en cuenta que brew install gawk(a diferencia de todos los demás) reemplazará awk(a través de un enlace simbólico /usr/local/bin/awk). Si desea conservar el original /usr/bin/awk, solorm /usr/local/bin/awk
wisbucky
17
No estoy seguro de que recomendaría reemplazarlos ; sin embargo, puede instalarlos en una ruta diferente y utilizarlos de esa manera. En general, si viene de Linux y desea acceder a más utilidades "genéricas" * nix, y un sistema similar a apt, entonces recomendaría buscar en Macports:
http://www.macports.org
Permite, por ejemplo, usar el último GCC "genérico", a diferencia de / además del GCC incluido de Apple, solo como ejemplo.
Por ejemplo, tar y zip de Mac OS X saben sobre metadatos que las versiones de GNU no.
lhf
1
Hay aplicaciones proporcionadas por Apple, que son solo GUI para algunas herramientas de línea de comandos y si las reemplaza, las aplicaciones pueden comenzar a comportarse de manera extraña, así que agregue, no reemplace.
Ɱark Ƭ
Derecho; algo como Macports los agrega, no los reemplaza.
Jonathan
Si desea utilizar las utilidades GNU de manera predeterminada con MacPorts, puede agregarlas /opt/local/libexec/gnubinal frente de su PATHvariable de entorno.
markshep
8
¡He escrito un guión para hacer exactamente esto! El guión se puede ver aquí (o debajo). Sin embargo, no siempre puedo garantizar que esta publicación reflejará la última versión del script vinculado anteriormente.
Al ejecutar el script, se instalará Homebrew (si no es así), se instalarán todas las utilidades GNU asociadas (si no es así) y la PATHvariable 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_pathfor i in/usr/local/Cellar/*/*/bin;do
echo 'export PATH="'$i':$PATH"'>>~/.bash_pathdonefor i in/usr/local/Cellar/*/*/libexec/gnubin;do
echo 'export PATH="'$i':$PATH"'>>~/.bash_pathdonefor i in/usr/local/Cellar/*/*/share/man;do
echo 'export MANPATH="'$i':$MANPATH"'>>~/.bash_pathdonefor i in/usr/local/Cellar/*/*/libexec/gnuman;do
echo 'export MANPATH="'$i':$MANPATH"'>>~/.bash_pathdone# 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_profilefi
¿No te encantan los votos negativos sin comentarios críticos? Gracias por el guion.
Justin Force
@JustinForce ¡No hay problema! Gracias por los comentarios.
Clay Freeman
2
-1. Este guión hace demasiada magia. Todo el .bash_pathcambio no es realmente necesario si sigue las respuestas de @ user495470 y @ xuhdev. Y cambiar PS1 está completamente fuera del alcance de esta pregunta.
Greg Dubicki
1
@GregDubicki desafortunadamente, la ruta de bash "destrozada" es necesaria para algunos de estos paquetes. Puedes comprobar esto por ti mismo. Con respecto al cambio de PS1: este script es para uso personal. Cualquiera que desee revertirlo puede hacerlo muy fácilmente.
Clay Freeman
5
He escrito un script que transforma de manera transparente la CLI de macOS en una nueva experiencia de CLI de GNU / Linux por
instalar programas faltantes de GNU
Actualización de programas obsoletos de GNU
reemplazando programas BSD preinstalados con su implementación GNU preferida
Instalar otros programas comunes entre las distribuciones populares de GNU / Linux
Intentando ejecutar el primer comando ( git clone [email protected].:fabiomaia/linuxify.git) Primero dijo "No se puede establecer la autenticidad del host 'github.com', etc.". Escribí yesy presioné Enter. Entonces dijo [email protected]: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.¿Qué pasa?
izogfif
@izogfif Intente clonar con HTTPS en su lugargit clone https://github.com/fabiomaia/linuxify.git
fabiomaia
1
Sí, eso funcionó. Actualice su respuesta (también, elimine esos dólares al principio; se copian al seleccionar texto y copiar y pegar en la consola).
homebrew
como se menciona a continuación, y luego aprender a usar las utilidades con ung
(gsed
,greadlink
, etc) en lugar de la sustitución de las utilidades del sistema.--with-default-names
solo afecta al usuario local. Podría ser un problema con las utilidades de terminal orientadas a Mac, pero si usa homebrew para todo, también podría pretender que está usando Linux. Mezclado con iterm2, funciona muy bien para mí, básicamente puedo fingir que estoy en casa con mis cajas de Linux.Respuestas:
Esto agrega enlaces simbólicos para utilidades GNU con el prefijo g para
/usr/local/bin/
:Ver
brew search gnu
para otros paquetes. Si desea utilizar los comandos sin el prefijo ag, agregue, por ejemplo,/usr/local/opt/coreutils/libexec/gnubin
antes de otros directorios en suPATH
.fuente
shiny-and-gnu.rb
en github.com/al-the-x/homebrew-mine/usr/local/opt/coreutils/libexec/gnuman:
, parece que MANPATH original no estaba incluido. Después de comentar el conf de MANPATH en mi bashrc, no conseguí nadaecoh $MANPATH
. Y, por supuesto, si lo usoman pwd
, obtuve el manual BSD. ¿Cómo arreglar esto?findutils
, debe agregar loPATH="/usr/local/Cellar/findutils/4.4.2/bin:$PATH"
que no se indica en la salida de la consola de instalación.findutils
, agregue esto a su$MANPATH
/usr/local/opt/findutils/share/man
MANPATH
el fin de mantener el valor por defecto del sistema es:MANPATH="/usr/local/opt/coreutils/libexec/gnuman:${MANPATH-/usr/share/man}"
. La clave está en la construcción${var-default_value}
.Además
brew install coreutils
, es posible que tenga que instalar otros paquetes, como por ejemplognu-sed
,grep
:Tenga en cuenta que la
--with-default-names
opción se elimina desde enero de 2019, por lo que cada binario debe agregarse a la ruta si se van a usar sin elg
prefijo.Referencia anterior (cuando
--with-default-names
estaba disponible): http://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/fuente
brew install gawk
(a diferencia de todos los demás) reemplazaráawk
(a través de un enlace simbólico/usr/local/bin/awk
). Si desea conservar el original/usr/bin/awk
, solorm /usr/local/bin/awk
No estoy seguro de que recomendaría reemplazarlos ; sin embargo, puede instalarlos en una ruta diferente y utilizarlos de esa manera. En general, si viene de Linux y desea acceder a más utilidades "genéricas" * nix, y un sistema similar a apt, entonces recomendaría buscar en Macports: http://www.macports.org
Permite, por ejemplo, usar el último GCC "genérico", a diferencia de / además del GCC incluido de Apple, solo como ejemplo.
fuente
/opt/local/libexec/gnubin
al frente de suPATH
variable de entorno.¡He escrito un guión para hacer exactamente esto! El guión se puede ver aquí (o debajo). Sin embargo, no siempre puedo garantizar que esta publicación reflejará la última versión del script vinculado anteriormente.
Al ejecutar el script, se instalará Homebrew (si no es así), se instalarán todas las utilidades GNU asociadas (si no es así) y la
PATH
variable se construirá a partir de las utilidades instaladas.fuente
.bash_path
cambio no es realmente necesario si sigue las respuestas de @ user495470 y @ xuhdev. Y cambiar PS1 está completamente fuera del alcance de esta pregunta.He escrito un script que transforma de manera transparente la CLI de macOS en una nueva experiencia de CLI de GNU / Linux por
https://github.com/fabiomaia/linuxify
También te permite deshacer todo fácilmente.
fuente
git clone [email protected].:fabiomaia/linuxify.git
) Primero dijo "No se puede establecer la autenticidad del host 'github.com', etc.". Escribíyes
y presioné Enter. Entonces dijo[email protected]: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
¿Qué pasa?git clone https://github.com/fabiomaia/linuxify.git