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 como funcionam no OS X.
Então, se você eliminar os comandos do sistema e substituí-los por equivalentes GNU que tenham comportamento incompatível ou argumentos de linha de comando, ele provavelmente quebrará alguma coisa. Especialmente se você usar algum software que tenha sido "portado" para o Mac OS X após ter sido originalmente projetado para rodar em Linux ou BSD, já que esses tipos de programas são mais prováveis em scripts de shell e comandos do sistema do que em chamar APIs do OS X.
O que você pode fazer é instalar um ambiente que instale os utilitários GNU em outro diretório sem sobrescrever os padrões, e então ajusta sua variável de ambiente PATH
para que dê prioridade aos comandos encontrados dentro do diretório GNU antes mesmo de pesquisar nos diretórios do sistema. Você pode conectar isso para que ele apenas defina seu PATH dessa maneira se você estiver iniciando um shell interativo; você pode pesquisar no google como fazer isso com bash
ou fazer outra pergunta no SU (ou procurar por ele, já que provavelmente foi perguntado antes) se você quiser fazer isso.
Um exemplo de tal ambiente é Homebrew que por exemplo tem GNU sed
entre outras coisas. Depois de instalar o Homebrew, você pode digitar
brew install coreutils
e instale o GNU Coreutils . Eles fornecerão a você sed
, date
, printf
, wc
e muitas outras ferramentas que acompanham o GNU / Linux, mas não o OS X. No entanto, para não "substituir" os binários padrão do OS X, eles serão prefixados com g
por padrão. Então, depois de instalar o Coreutils, se você quiser usar o GNU sed, digite
gsed
Se isso for muito trabalhoso para escrever todas as vezes, 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
:
PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"
Claro, se você precisa de um ambiente Linux de sopa a nozes (kernel, X11, compatibilidade syscall, etc) você terá que rodar o Linux em uma máquina virtual, como VirtualBox . Essa é uma aposta segura se você precisar executar software ou scripts projetados para serem executados no Linux.
O Homebrew só lhe dará a compatibilidade para 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 algumas outras chamadas de sistema de baixo nível que estão disponíveis apenas no Linux, e para as quais não existe equivalente no OS X, portar certos programas do Linux para o OS X pode ser impraticável ou impossível sem mudanças significativas no código.