Simpatizo com suas frustrações, mas acredito que, a longo prazo, causará maior frustração se elas forem substituídas - Depois de tentar fazer a mesma coisa, recomendo usar homebrewcomo mencionado abaixo e depois aprender a usar os utilitários com a g( gsed, greadlinketc) em vez de substituir os utilitários do sistema.
Não concordo com @cwd, o uso --with-default-namesafeta apenas o usuário local. Pode ser um problema com os utilitários de terminal orientados a mac, mas se você usa o homebrew para tudo, também pode fingir que está usando o linux. Misturado com iterm2, está funcionando muito bem para mim, posso basicamente fingir que estou em casa com minhas caixas de linux.
Ray Foss
Respostas:
210
Isso adiciona links simbólicos para utilitários GNU com prefixo g para /usr/local/bin/:
Veja brew search gnupara outros pacotes. Se você deseja usar os comandos sem um prefixo AG, adicione, por exemplo, /usr/local/opt/coreutils/libexec/gnubinantes de outros diretórios no seu 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
==>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"
O primeiro PATH funciona, mas MANPATH falhou, por quê? É porque estou usando o OSX10.10? Eu ecoei $ MANPATH, e entendi /usr/local/opt/coreutils/libexec/gnuman:, parece que MANPATH original não foi incluído. Depois de comentar o confidente MANPATH no meu bashrc, não consegui nada ecoh $MANPATH. E, claro, se eu usar man pwd, recebi o manual do BSD. Como consertar isto?
Zen
2
Para findutils, você precisa adicionar o PATH="/usr/local/Cellar/findutils/4.4.2/bin:$PATH"que não está indicado na saída do console de instalação.
Sridhar Sarnobat
1
Além disso, para obter a página de manual correta findutils, adicione-a ao seu$MANPATH/usr/local/opt/findutils/share/man
Christian Long
1
@Zen: o caminho certo para iniciar MANPATHde forma a manter o valor do sistema padrão é: MANPATH="/usr/local/opt/coreutils/libexec/gnuman:${MANPATH-/usr/share/man}". A chave está na construção ${var-default_value}.
dan
50
Além brew install coreutils, você também pode precisar instalar alguns outros pacotes, como gnu-sed, grep:
Observe que a --with-default-namesopção é removida desde janeiro de 2019, portanto, cada binário deve ser adicionado ao caminho para que seja usado sem o gprefixo.
Observe que brew install gawk(diferente de todos os outros) será substituído awk(por um link simbólico /usr/local/bin/awk). Se você quiser manter o original /usr/bin/awk, apenasrm /usr/local/bin/awk
wisbucky
17
Não tenho certeza se recomendaria substituí- los; no entanto, você pode instalá-los em um caminho diferente e utilizá-los dessa maneira. No geral, se você é proveniente do Linux e deseja acessar mais utilitários * genéricos * nix e um sistema semelhante ao apt, recomendo consultar o Macports:
http://www.macports.org
Ele permite, por exemplo, usar o GCC "genérico" mais recente, em oposição a / além do GCC incluído na Apple, apenas como exemplo.
Por exemplo, tar e zip do Mac OS X sabem sobre metadados que as versões GNU não.
Lhf 22/10/12
1
Existem aplicativos fornecidos pela Apple, que são apenas GUIs para algumas ferramentas de linha de comando e, se você substituí-los, os aplicativos podem começar a se comportar de maneira estranha; portanto, adicione, não substitua.
Ɱark Ƭ
Direito; algo como o Macports os adiciona, não os substitui.
23412 Jonathan
Se você deseja usar os utilitários GNU por padrão com o MacPorts, pode adicioná /opt/local/libexec/gnubin-lo à frente da sua PATHvariável de ambiente.
markshep 26/09/16
8
Eu escrevi um script para fazer exatamente isso! O script pode ser visto aqui (ou abaixo). No entanto, nem sempre posso garantir que este post refletirá a versão mais recente do script vinculado anteriormente.
Após a execução do script, o Homebrew será instalado (se ainda não estiver), todos os utilitários GNU associados serão instalados (se ainda não estiverem), e a PATHvariável será criada a partir dos utilitários instalados.
#!/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_path
donefor i in/usr/local/Cellar/*/*/libexec/gnubin;do
echo 'export PATH="'$i':$PATH"'>>~/.bash_path
donefor i in/usr/local/Cellar/*/*/share/man;do
echo 'export MANPATH="'$i':$MANPATH"'>>~/.bash_path
donefor 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
Você simplesmente não ama os votos negativos sem comentários críticos? Obrigado pelo script.
Justin Força
@JustinForce Sem problemas! Obrigado pelo feedback.
Clay Freeman
2
-1. Este script faz muita mágica. Todo o .bash_path-mangling não é realmente necessário se você seguir as respostas de @ user495470 e @ xuhdev. E mudar o PS1 está completamente fora do escopo desta questão.
Greg Dubicki
1
@GregDubicki, infelizmente, o caminho bash "mangling" é necessário para alguns desses pacotes. Você pode verificar isso por si mesmo. Em relação à alteração do PS1: este script é para uso pessoal. Quem quiser revertê-lo pode fazê-lo com muita facilidade.
argila Freeman
5
Eu escrevi um script que transforma transparentemente a CLI do macOS em uma nova experiência da CLI do GNU / Linux,
instalando programas GNU ausentes
atualizando programas GNU desatualizados
substituindo programas BSD pré-instalados por sua implementação GNU preferida
instalar outros programas comuns entre distribuições populares do GNU / Linux
Tentando executar o primeiro comando ( git clone [email protected].:fabiomaia/linuxify.git) Ele disse primeiro "A autenticidade do host 'github.com' não pode ser estabelecida etc.". Digitei yese pressionei Enter. Então ele disse: [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.O que há de errado?
izogfif 11/03
@izogfif Tente clonar com HTTPSgit clone https://github.com/fabiomaia/linuxify.git
fabiomaia 11/03
1
Sim, isso funcionou. Atualize sua resposta (também remova esses dólares no início - eles são copiados quando você seleciona texto e copia e cola no console).
homebrew
como mencionado abaixo e depois aprender a usar os utilitários com ag
(gsed
,greadlink
etc) em vez de substituir os utilitários do sistema.--with-default-names
afeta apenas o usuário local. Pode ser um problema com os utilitários de terminal orientados a mac, mas se você usa o homebrew para tudo, também pode fingir que está usando o linux. Misturado com iterm2, está funcionando muito bem para mim, posso basicamente fingir que estou em casa com minhas caixas de linux.Respostas:
Isso adiciona links simbólicos para utilitários GNU com prefixo g para
/usr/local/bin/
:Veja
brew search gnu
para outros pacotes. Se você deseja usar os comandos sem um prefixo AG, adicione, por exemplo,/usr/local/opt/coreutils/libexec/gnubin
antes de outros diretórios no seuPATH
.fonte
shiny-and-gnu.rb
em github.com/al-the-x/homebrew-mine/usr/local/opt/coreutils/libexec/gnuman:
, parece que MANPATH original não foi incluído. Depois de comentar o confidente MANPATH no meu bashrc, não consegui nadaecoh $MANPATH
. E, claro, se eu usarman pwd
, recebi o manual do BSD. Como consertar isto?findutils
, você precisa adicionar oPATH="/usr/local/Cellar/findutils/4.4.2/bin:$PATH"
que não está indicado na saída do console de instalação.findutils
, adicione-a ao seu$MANPATH
/usr/local/opt/findutils/share/man
MANPATH
de forma a manter o valor do sistema padrão é:MANPATH="/usr/local/opt/coreutils/libexec/gnuman:${MANPATH-/usr/share/man}"
. A chave está na construção${var-default_value}
.Além
brew install coreutils
, você também pode precisar instalar alguns outros pacotes, comognu-sed
,grep
:Observe que a
--with-default-names
opção é removida desde janeiro de 2019, portanto, cada binário deve ser adicionado ao caminho para que seja usado sem og
prefixo.Referência antiga (quando
--with-default-names
disponível): http://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/fonte
brew install gawk
(diferente de todos os outros) será substituídoawk
(por um link simbólico/usr/local/bin/awk
). Se você quiser manter o original/usr/bin/awk
, apenasrm /usr/local/bin/awk
Não tenho certeza se recomendaria substituí- los; no entanto, você pode instalá-los em um caminho diferente e utilizá-los dessa maneira. No geral, se você é proveniente do Linux e deseja acessar mais utilitários * genéricos * nix e um sistema semelhante ao apt, recomendo consultar o Macports: http://www.macports.org
Ele permite, por exemplo, usar o GCC "genérico" mais recente, em oposição a / além do GCC incluído na Apple, apenas como exemplo.
fonte
/opt/local/libexec/gnubin
-lo à frente da suaPATH
variável de ambiente.Eu escrevi um script para fazer exatamente isso! O script pode ser visto aqui (ou abaixo). No entanto, nem sempre posso garantir que este post refletirá a versão mais recente do script vinculado anteriormente.
Após a execução do script, o Homebrew será instalado (se ainda não estiver), todos os utilitários GNU associados serão instalados (se ainda não estiverem), e a
PATH
variável será criada a partir dos utilitários instalados.fonte
.bash_path
-mangling não é realmente necessário se você seguir as respostas de @ user495470 e @ xuhdev. E mudar o PS1 está completamente fora do escopo desta questão.Eu escrevi um script que transforma transparentemente a CLI do macOS em uma nova experiência da CLI do GNU / Linux,
https://github.com/fabiomaia/linuxify
Também permite desfazer tudo com facilidade.
fonte
git clone [email protected].:fabiomaia/linuxify.git
) Ele disse primeiro "A autenticidade do host 'github.com' não pode ser estabelecida etc.". Digiteiyes
e pressionei Enter. Então ele disse:[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.
O que há de errado?git clone https://github.com/fabiomaia/linuxify.git