Como manter o sistema de pontos agnóstico?

21

Devido ao trabalho, comecei recentemente a usar o OS X e o configurei usando o homebrew para obter uma experiência semelhante à do Linux.

No entanto, existem algumas diferenças em suas configurações. Alguns só precisam estar no lugar em um sistema. Como meus dotfiles vivem em um repositório git, fiquei me perguntando que tipo de mudança eu poderia definir no lugar, para que algumas configurações sejam lidas apenas para o sistema Linux e outras para o OS X.

Quanto aos dotfiles, refiro-me, entre outros, a .bash_profiles ou .bash_alias .

    
por k0pernikus 17.07.2013 / 11:01

2 respostas

22

Mantenha os dotfiles o mais portáteis possível e evite configurações ou switches dependentes do sistema operacional que exijam uma versão específica de uma ferramenta, por exemplo, evite a sintaxe GNU se você não usar o software GNU em todos os sistemas.

Você provavelmente vai se deparar com situações em que é desejável usar configurações específicas do sistema. Nesse caso, use uma instrução switch com as configurações individuais:

case $(uname) in
  'Linux')   LS_OPTIONS='--color=auto --group-directories-first' ;;
  'FreeBSD') LS_OPTIONS='-Gh -D "%F %H:%M"' ;;
  'Darwin')  LS_OPTIONS='-h' ;;
esac

Caso os arquivos de configuração de aplicativos arbitrários exijam opções diferentes, é possível verificar se o aplicativo fornece opções de compatibilidade ou outros mecanismos. Por exemplo, para vim , você pode verificar a versão e o patchlevel para suportar recursos que as versões mais antigas, ou as versões compiladas com um conjunto de recursos diferente, não possuem. Exemplo de fragmento de .vimrc :

if v:version >= 703
  if has("patch769")
    set matchpairs+=“:”
  endif
endif
    
por 17.07.2013 / 11:18
3

Se você estiver preocupado apenas com os arquivos que são realmente executados, como .bash_profiles e amigos, talvez você consiga usar, por exemplo, uname para diferenciar com base no sistema em que o código é executado.

Por exemplo , completamente não testado e com a ressalva de que eu não tenho um OS X para experimentar coisas, se você atualmente tem no Linux:

alias ll='ls -lFA'

e no Mac OS X:

alias ll='ls -lFAx'

(onde -x faz o ls do OS X fazer algo que o GNU ls faz por padrão), então eles podem ser combinados em algo como isto:

OS="$(uname -s)"
if test "$OS" = "Darwin"; then
    alias ll='ls -lFAx'
    # ...other OS X-specific things go here...
else if test "$OS" = "Linux"; then
    alias ll='ls -lFA'
    # ...other Linux-specific things go here...
fi
# ...generic things go here...

O único requisito então é que uname -s funciona basicamente da mesma maneira (deve, pois ambos os sistemas são razoavelmente POSIX-y e uname -s é requerido pelo POSIX (obrigado Marco por apontando isso )), e que a sintaxe para a ramificação de script shell baseada em uma comparação de string é a mesma. Você provavelmente pode testar com base em outros critérios também; Por exemplo, você poderia procurar por / etc / lsb_release, verificar se / proc / sys / kernel / ostype contém "Linux" ou quaisquer outros testes que você possa apresentar.

    
por 17.07.2013 / 11:19