Substituir os comandos shell do OS X pelas versões linux?

32

Os comandos disponíveis por padrão no Terminal no OS X não parecem se comportar como suas versões linux. Como posso substituir todos eles pelos comandos GNU linux atuais?

Por exemplo, sed -i requer um argumento "" irritantemente adicional. Além disso, só funciona com arquivos de texto. Isso é inútil.

    
por TheOne 18.09.2012 / 15:12

4 respostas

43

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.

    
por 18.09.2012 / 15:54
3

Você pode usar um Prefixo do Gentoo que suporte o OS X, você pode fazer isso autoinicializando-o e adicionando os caminhos relevantes no diretório prefix ao seu PATH. Pode ser que isso já faça isso para você. Depois de ter feito isso, você pode usar comandos padrão do Gentoo para instalar pacotes.

emerge coreutils vai te dar 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 . Isso é apenas usar uma das URLs na segunda metade desse artigo e colocá-la em PORTAGE_BINHOST="... your url here ..." in ./etc/make.conf em seu prefixo.

    
por 18.09.2012 / 16:08
1

Como acompanhamento da postagem de @ allquixotic, aqui estão as instruções oficiais por brew install coreutils

All commands have been installed with the prefix 'g'.

If you really need to use these commands with their normal name 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 the "gnuman" directory to your MANPATH from your bashrc as well

MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"
    
por 15.09.2014 / 20:08
0

Com relação a sed , você pode baixar um binário pré-compilado do projeto Rudix . Para mais pacotes Rudix , veja aqui e aqui .

    
por 01.11.2017 / 19:23