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

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

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

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

Responder1

No caso geral, você não pode (ounão deveria) substitua os comandos padrão. A razão é que muitos scripts de administração de sistema e pacotes de terceiros provavelmente dependem desses comandos para se comportarem da maneira que aparecem no OS X.

Portanto, se você simplesmente eliminar os comandos do sistema e substituí-los por equivalentes GNU que tenham comportamento incompatível ou argumentos de linha de comando, provavelmente irá quebrar alguma coisa. Especialmente se você usar algum software que foi "portado" para Mac OS X depois de ter sido originalmente projetado para rodar em Linux ou BSD, já que esses tipos de programas são mais propensos a depender de scripts de shell e comandos de sistema em vez de chamar APIs do OS X.

O que vocêpodefazer é instalar um ambiente que instale os utilitários GNU em outro diretório sem substituir os padrões e entãoajuste sua PATHvariável de ambientepara que dê prioridade aos comandos encontrados no diretório GNU antes mesmo de pesquisar nos diretórios do sistema. Você pode conectar isso para que ele defina seu PATH dessa maneira apenas se estiver iniciando um shell interativo; você pode pesquisar no Google como fazer isso bashou fazer outra pergunta no SU (ou pesquisá-la, já que provavelmente já foi perguntado antes) se quiser fazer isso.

Um exemplo desse ambiente éCerveja caseiraque por exemplo tem GNU sedentre outras coisas. Depois de instalar o Homebrew, você pode digitar

brew install coreutils

e instale oGNU Coreutils. Eles fornecerão a você sed, date, printfe wcmuitas outras ferramentas fornecidas com o GNU/Linux, mas não com o OS X. No entanto, para não "substituir" os binários padrão do OS X, eles serão prefixados com gpor padrão. Então, após instalar o Coreutils, se você quiser usar GNU sed, digite

gsed

Se for muito complicado digitar todas as vezes, você pode adicionar um diretório "gnubin" ao seu PATH e apenas chamar 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 do começo ao fim (kernel, X11, compatibilidade com syscall, etc), você terá que rodar o Linux em uma máquina virtual, comoCaixa Virtual. Esta é uma aposta segura se você precisar executar software ou scripts projetados para rodar em Linux.

O Homebrew só oferece compatibilidade para certas classes de programas que não requerem 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, portanto, portar certos programas do Linux para o OS X pode ser impraticável ou impossível sem alterações significativas no código.

Responder2

Você poderia usar umPrefixo Gentooque suporta OS X, você pode fazer issoinicializandoe, em seguida, adicionando os caminhos relevantes no diretório de prefixos ao seu PATH. Pode ser que isso já faça isso por você. Depois de fazer isso, você pode usar comandos padrão do Gentoo para instalar pacotes.

emerge coreutilsvocê obterá os utilitários GNU padrão, por exemplo.

Por favor note que o Gentoo compila por padrão, você pode quererconfigurar um host binárioem vez de. Isso é apenas usar um dos URLs da segunda metade do artigo e colocá-lo PORTAGE_BINHOST="... your url here ..."em ./etc/make.confseu prefixo.

Responder3

Seguindo a postagem de @allquixotic, aqui estão as instruções oficiais porbrew install coreutils

Todos os comandos foram instalados com o prefixo 'g'.

Se você realmente precisa usar esses comandos com seus nomes normais, pode adicionar um diretório "gnubin" ao seu PATH a partir do seu bashrc, como

PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"

Além disso, você também pode acessar suas páginas de manual com nomes normais, o diretório "gnuman" para o seu MANPATH a partir do seu bashrc

MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"

Responder4

Com relação a sedvocê pode baixar um binário pré-compilado doRudixprojeto. Para mais Rudixpacotes consulteaquieaqui.

informação relacionada