Descubrí que hay algunas diferencias entre el comando de utilidad que usé en Mac OSX y Linux. Quiero hacer mi experiencia unida.
¿Cómo podría reemplazar todas mis utilidades mac con utilidades GNU?
Esto agrega 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 grep
Consulte brew search gnu
por otros paquetes. Si desea usar los comandos sin el prefijo ag, agregue, por ejemplo /usr/local/opt/coreutils/libexec/gnubin
, antes de otros directorios en su archivo 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"
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 la conf MANPATH en mi bashrc, no obtuve nada ecoh $MANPATH
. Y por supuesto, si uso man pwd
, obtuve el manual de BSD. ¿Cómo arreglar esto?findutils
, debe agregar PATH="/usr/local/Cellar/findutils/4.4.2/bin:$PATH"
lo 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
para mantener el valor predeterminado del sistema es: MANPATH="/usr/local/opt/coreutils/libexec/gnuman:${MANPATH-/usr/share/man}"
. La clave está en la construcción ${var-default_value}
.utilDir=coreutils/8.25; cp -a /usr/local/Cellar/${utilDir}/libexec/gnubin/* ~/bin
solo cambie el utilDir
para cada conjunto de utilidades que desee vincular. Entonces puedo configurar `PATH="/home/me/bin:$PATH" sin hacer tanto lío con diferentes directorios.find
o algún otro programa común, que siempre se puede saber cuando se obtiene un error al usar find
sin un argumento de directorio.PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"
ayudó. ¡Gracias!Además brew install coreutils
, es posible que también deba instalar algunos otros paquetes, gnu-sed
como grep
:
brew install findutils
brew install gnu-indent
brew install gnu-sed
brew install gnutls
brew install grep
brew install gnu-tar
brew install gawk
Tenga en cuenta que la --with-default-names
opción se eliminó desde enero de 2019, por lo que cada binario debe agregarse a la ruta si se van a usar sin el g
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/
brew install gawk
(a diferencia de todos los demás) se reemplazará awk
(a través de un enlace simbólico /usr/local/bin/awk
). Si desea conservar el original /usr/bin/awk
, simplementerm /usr/local/bin/awk
ping
disponible?ping
es una utilidad del kernel de Linux: github.com/iputils/iputilsNo estoy seguro de recomendar 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, le recomendaría buscar en Macports: http://www.macports.org
Permite, por ejemplo, usar el último GCC "genérico", en lugar de / además del GCC incluido de Apple, solo como ejemplo.
/opt/local/libexec/gnubin
al frente de su PATH
variable de entorno.¡He escrito un script para hacer exactamente esto! El guión se puede ver aquí (o más abajo). Sin embargo, no siempre puedo garantizar que esta publicación refleje la última versión del script vinculado anteriormente.
Al ejecutar el script, se instalará Homebrew (si aún no lo está), se instalarán todas las utilidades GNU asociadas (si aún no lo están) y la PATH
variable se creará a partir de las utilidades instaladas.
#!/bin/bash
# Install Homebrew (if not already installed)
/bin/bash -c "$(curl -fsSL "\
"https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 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
[[ -f ~/.bash_path ]] && mv ~/.bash_path ~/.bash_path.orig
# 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
He escrito un script que transforma de forma transparente la CLI de macOS en una nueva experiencia de la CLI de GNU/Linux al
https://github.com/fabiomaia/linuxify
git clone https://github.com/fabiomaia/linuxify.git
cd linuxify/
./linuxify install
También le permite deshacer todo fácilmente.
./linuxify uninstall
git clone git@github.com.:fabiomaia/linuxify.git
) Primero decía "La autenticidad del host 'github.com' no se puede establecer, etc.". Escribí yes
y presioné Enter. Luego dijo git@github.com: 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
Como alternativa a la configuración de las variables de entorno PATH y MANPATH (que en realidad recomendaría), también es posible vincular binarios a una ubicación PATH existente como esta:
Necesita saber dónde Homebrew instala los coreutils
binarios.
/usr/local/opt/coreutils/bin
El /usr/local/opt
directorio es donde Homebrew almacena archivos relativamente estáticos que es poco probable que cambien entre actualizaciones.
Luego puede crear enlaces simbólicos desde allí a una ubicación que ya está en su RUTA. Debe ser una ruta que se cargue temprano en la RUTA, porque la RUTA se busca por orden de llegada. /usr/local/bin
es una buena opción basada en mirar echo $PATH
.
which sha256sum # prove it is not on PATH
ln -s /usr/local/opt/coreutils/bin/sha256sum /usr/local/bin/
which sha256sum # prove it is on PATH
De esta manera, sería casi tan fácil crear enlaces simbólicos. En algunos casos, como cuando desea un control más estricto, es una buena opción en lugar de agregar un directorio completo a su PATH y MANPATH.
izq.
dennis
cwd
homebrew
como se menciona a continuación, y luego aprender a usar las utilidades con ag
(gsed
,greadlink
, etc ) en lugar de reemplazar las utilidades del sistema.dan pritts
ray foss
--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 fingir que está usando Linux. Combinado con iterm2, funciona muy bien para mí, básicamente puedo fingir que estoy en casa con mis cajas de Linux.smci
Zearín
cp
ymv
puede ser peligroso para los atributos extendidos del archivo (p. ej., etiquetas, invisible, alias, paquete y más). Para más detalles, vea estos dos artículos: brettterpstra.com/2014/07/03/… brettterpstra.com/2014/07/04/how-to-lose-your-tags Están un poco anticuados, pero solo quiero plantear la advertencia para que pueda investigar si el uso de GNU interfiere con sus necesidadesmv
.cp
cambuntuoso
de novo
caldera
Código Noviciado
caldera