Os comandos disponíveis por padrão no Terminal no OS X, não parecem se comportar como suas versões do Linux. Como posso substituir todos eles pelos comandos reais do GNU linux?
Por exemplo, sed -i requer um argumento "" irritantemente adicional. Além disso, ele funciona apenas com arquivos de texto. Isso é inútil.
-i
bandeira não é padrão .ed
é para editar arquivos.Respostas:
No caso geral, você não pode (ou não deve ) substituir os comandos padrão. O motivo é que muitos scripts de administração do sistema e pacotes de terceiros provavelmente dependem desses comandos para se comportarem da maneira que eles fazem de imediato no OS X.
Portanto, se você apenas apagar os comandos do sistema e substituí-los por equivalentes GNU que possuem comportamento incompatível ou argumentos de linha de comando, provavelmente isso quebrará alguma coisa. Especialmente se você usar algum software que foi "portado" para o Mac OS X após ser originalmente projetado para ser executado no Linux ou BSD, pois esses tipos de programas têm maior probabilidade de depender de scripts de shell e comandos do sistema, em vez de chamar APIs do OS X.
O que você pode fazer é instalar um ambiente que instale os utilitários GNU em outro diretório sem substituir os padrões e, em seguida, ajuste sua
PATH
variável de ambiente para dar prioridade aos comandos encontrados no diretório GNU antes mesmo de pesquisar nos diretórios do sistema. Você pode conectar isso para que ele apenas configure seu PATH dessa maneira se estiver iniciando um shell interativo; você pode pesquisar no Google como fazer issobash
ou fazer outra pergunta no SU (ou procurá-lo, pois provavelmente já foi perguntado antes) se quiser fazer isso.Um exemplo desse ambiente é o Homebrew, que por exemplo possui o GNU
sed
entre outras coisas. Depois de instalar o Homebrew, você pode digitare instale o GNU Coreutils . Estes irão fornecer-lhe
sed
,date
,printf
,wc
e muitas outras ferramentas que vêm com o GNU / Linux, mas não OS X. No entanto, de modo a não "substituição" binários OS padrão X, eles serão prefixados comg
por padrão. Então, depois de instalar o Coreutils, se você quiser usar o GNU sed, digiteSe isso é muito complicado de digitar toda vez, você pode adicionar um diretório "gnubin" ao seu PATH e apenas chamar o GNU sed com
sed
. Você precisará adicionar o seguinte ao seu~/.bash_profile
:Obviamente, se você precisar de um ambiente Linux, de sopa a nozes (kernel, X11, compatibilidade com syscall, etc.), precisará executar o Linux em uma máquina virtual, como o VirtualBox . Essa é uma aposta segura se você precisar executar software ou scripts projetados para serem executados no Linux.
O Homebrew só oferece compatibilidade com certas classes de programas que não exigem comportamento específico do Linux. Por exemplo,
inotify
está disponível apenas no Linux.drm
(o Direct Rendering Manager) está disponível apenas no Linux. Existem outras chamadas de sistema de nível inferior disponíveis apenas no Linux e para as quais não existe equivalente no OS X, portanto, a portabilidade de determinados programas do Linux para o OS X pode ser impraticável ou impossível sem alterações significativas no código.fonte
brew install coreutils
que não incluased
. Você pode fazerbrew install gnu-sed
isso, porém, instalagsed
e nãosed
, mesmo se você atualizar o seu$PATH
. Eu criei um link simbólico para ocultar os Macssed
:ln -s $(which gsed) $(brew --prefix coreutils)/libexec/gnubin/sed
no entanto, você ainda precisa fazerman gsed
para ver a página de manual correta.brew install gnu-sed --default-names
irá instalá-lo comosed
--default-names
, você pode instalar com os comandos prefixados g e, em seguida, instalar oh-my-zsh (altamente recomendado) e ativar o plugin gnu-utils.Você pode usar um prefixo do Gentoo que suporte o OS X, pode fazer isso inicializando-o e adicionando os caminhos relevantes no diretório do prefixo ao seu PATH. Pode ser que isso já faça isso por você. Depois de fazer isso, você pode usar os comandos padrão do Gentoo para instalar pacotes.
emerge coreutils
você obterá os utilitários GNU padrão, por exemplo.Por favor note que o Gentoo compila por padrão, você pode querer configurar um host binário . Este é apenas usando um dos URLs no segundo semestre do mesmo artigo, e colocá-lo em
PORTAGE_BINHOST="... your url here ..."
em./etc/make.conf
em seu prefixo.fonte
Como acompanhamento da publicação de @ allquixotic, aqui estão as instruções oficiais para
brew install coreutils
fonte
Com relação a
sed
você, você pode baixar um binário pré-compilado doRudix
projeto. Para maisRudix
pacotes, veja aqui e aqui .fonte