Bash no Linux vs Mac OS


27

Estou comprando um iMac. Estou trabalhando no Linux há muito tempo e faço vários scripts de bash. Eu queria saber se todos os comandos e recursos do bash estão disponíveis no Mac OS? Alguém tem alguma experiência com scripts de bash do Mac? Agradeço sua opinião.

Respostas:


32

O Bash em si será basicamente o mesmo. Haverá algumas pequenas diferenças, mas nenhuma delas afetará a portabilidade de seus scripts.

O principal problema é que os coreutils do MacOS são baseados no FreeBSD, enquanto os utilitários com os quais você está acostumado são mais prováveis ​​do projeto GNU. Os coreutils do FreeBSD nem sempre são compatíveis com os coreutils do GNU. Existem diferenças de desempenho e comportamento entre as versões GNU e FreeBSD do sed , grep , ps e outros utilitários .

Você pode instalar os coreutils GNU, mas eles têm g-prefixos (por exemplo, gcatpara cat). Não é uma boa idéia substituir os coreutils do MacOS pelos coreutils do GNU.


6
Deve-se ampliar que o uso dos principais utilitários padrão do FreeBSD pode afetar a portabilidade de seus scripts (por exemplo, pspossui diferentes sinalizadores, assim como grep). Eu bati minha cabeça contra a parede algumas vezes tentando descobrir por que meu script Ubuntu não estava produzindo a mesma saída no meu Mac.
Chris Gregg

11
Se você deseja escrever seus scripts para serem portáteis, www2.opengroup.org/ogsys/jsp/publications/mainPage.jsp é um ótimo local para obter as especificações estritamente padrão dos utilitários e comandos POSIX e XCU.
Kojiro 09/07

@ ChrisGregg: Eu concordo. Eu adicionei um pouco à minha resposta para enfatizar que existem incompatibilidades entre os dois conjuntos de ferramentas.

5

Se isso importa, bashno Mac OS X Mountain Lion ainda é a versão 3.2. Atualmente, a maioria das distribuições linux é fornecida com a versão 4.x, assim você estará perdendo os recursos da versão 4. Atualmente, a versão 4.2.45 está disponível no Homebrew como uma solução alternativa. Não sei qual é a versão do Mavericks, não sei se alguém que sabe ainda tem permissão para dizer.

Conforme mencionado por outros, bashé o mesmo bash(além das versões já mencionadas), mas o Mac OS X usa um país de usuário (principalmente) do BSD. Muitos dos utilitários de sistema padrão têm opções ligeiramente diferentes ou se comportam de maneira ligeiramente diferente. Infelizmente, eles são numerosos demais para serem listados aqui.


2
4 anos de festa, mais tarde, High Sierra ainda está usando: GNU bash, versão 3.2.57 (1) -release (x86_64-apple-darwin17) Copyright (C) 2007 Free Software Foundation, Inc.
Nate Lockwood

4

Instale o homebrew (um gerenciador de pacotes) e instale as versões gnu de alguns utilitários básicos:

$ brew install coreutils
$ brew install gnu-sed

Após cada instalação, ele mostrará as etapas que você pode seguir para que você possa simplesmente chamar em datevez de, gdatepor exemplo, para que você ainda possa usar seus scripts bash do Linux sem nenhuma modificação.

Parabéns, você acabou de resolver 99% dos problemas de script de plataforma cruzada.


3
Por outro lado, se seus scripts são realmente portáteis, convém corrigir os scripts, não os sintomas.
Tripleee

2

Uma coisa que pode ser frustrante vindo do Linux para um Mac é que não existe /procum sistema de pseudo-arquivos. Isso quebrou vários scripts do Linux e pode ser complicado encontrar maneiras adequadas de obter as mesmas informações encontradas no procscript bash do Mac.


0

Eu sou um usuário 'principalmente linux, ocasionalmente mac' e acho que:

bash ~/.bashrce , ~/.bash_aliasesprincipalmente, funcionam da mesma maneira.

Um problema que encontrei foi um dos comandos para alterar o prompt de cores que não funcionava no Mac. Com essa e outras experiências, aprendi a manter uma janela do terminal aberta e conectada ao configurar meu .bashrcarquivo. Ou seja, posso testar 'nova janela' e encontrar erros no que ainda está conectado.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.