Linha de comando do MacOS - é possível escrever scripts portáveis no MacOS e no Linux?

3

Eu tenho ficado muito satisfeito com o MacOS como uma plataforma de desenvolvimento, e é um pouco semelhante a uma linha de comando do Linux, mas há uma série de exceções notáveis:

  • todos os comandos: o comportamento de análise de argumentos é diferente. O Linux aceitará flags em qualquer ordem, incluindo flags seguindo os arquivos. No MacOS, os flags seguintes arquivos são ignorados; flags devem ser apresentados antes de qualquer nome de arquivo

  • base64: não instalado por padrão. uma vez instalado, NÃO aceita o sinalizador '-i' que é requerido no Linux para ignorar o espaço em branco no texto codificado na base64.

  • sed: O MacOS trata o sinalizador "-i" MUITO diferente do Linux (requer uma extensão que interrompe scripts no Linux). regex estendido é "-E" no MacOS e "-e" no Linux

(além de vários outros problemas ...)

Em quase todos os casos, descobri que a variante comportamental do Linux é mais fácil de usar / mais poderosa. Existe uma maneira de atualizar os utilitários de linha de comando do MacOS para torná-lo mais semelhante ao Linux? Ou eu estou pensando sobre isso errado e deveria beber um pouco de kool-aide? É menor, mas essas falhas me fazem arrancar o cabelo quando tento ir e voltar entre as caixas Linux / MacOS dev.

    
por Dave Dopson 14.07.2011 / 20:17

4 respostas

2

Darwin, a base Unix do Mac OS X, é essencialmente um sabor do BSD, então algumas das diferenças que você está vendo se devem a isso. A falta de certas ferramentas que podem ser padrão na maioria ou em todas as distribuições Linux podem ser tratadas por

  • usando um gerenciador de pacotes, como
    • MacPorts ou
    • Fink; ou por
  • instalando a partir do código-fonte.

Às vezes, os pacotes são inaceitavelmente atrasados. Por exemplo, eu encontrei um bug no tmux 1.4 que o torna inutilizável para mim, mas o macports ainda não tem 1.5. Então, instalar a partir da fonte pode ser preferível em muitos casos.

    
por 14.07.2011 / 21:20
2

As várias ferramentas GNU estão disponíveis no Fink ou no DarwinPorts ou algo parecido.

    
por 14.07.2011 / 21:00
0

Existe um monte de programas "iguais" que não interpretam opções em um * nix da mesma maneira que interpretam as mesmas opções no outro sistema operacional * nix, incluindo o linux também. Não há nada que se possa fazer sobre isso.

E se os comandos embutidos do shell o incomodarem, digite um shell ps -p $$. Veja o nome da saída do shell no CMD. Se os shells forem diferentes, basta instalar no OSX o mesmo tipo de shell encontrado no linux. Pode ser tcsh e zsh.

    
por 15.07.2011 / 07:43
0

1) Instale o Homebrew

2) "brew instalação coreutils gnu-sed gnu-tar gnu-getop gnu-gnu-tempo que"

Então todo o material padrão do Linux está disponível com um prefixo "g" - então "gtar" ao invés de "tar".

Com um pouco de hackery, é possível alternar entre os programas originais do BSD e as versões do GNU / Linux. por exemplo, configure um / usr / local / gnubin que tenha links simbólicos como tar - > / usr / local / bin / gtar. Em seguida, coloque esse diretório primeiro na variável PATH. Há também o uso de aliases, mas eu não sou um grande fã de aliases que são o mesmo que um programa real (acho que isso é frágil e propenso a erros).

    
por 26.01.2012 / 19:48