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 local em um sistema. Como meus dotfiles moram em um repositório git, eu queria saber que tipo de opção eu poderia definir, para que algumas configurações sejam lidas apenas para o sistema Linux e outras para o OS X.
Quanto aos dotfiles, estou me referindo, entre outros, a .bash_profiles
ou .bash_alias
.
if (exists rcfile.local); source rcfile.local; endif
, traduzida para o arquivo rc apropriado. O principal arquivo rc tento manter o sistema independente, enquanto a.local
versão possui configurações específicas do sistema. Se você quiser tudo isso em um único repositório, poderá ter os diretórios do sistema e vincular o rcfile.local ao que está no diretório correto.Respostas:
Mantenha os arquivos de ponto o mais portáveis possível e evite configurações ou comutadores dependentes do SO 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 encontrará 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:
Caso os arquivos de configuração de aplicativos arbitrários exijam opções diferentes, você pode verificar se o aplicativo fornece opções de compatibilidade ou outros mecanismos. Por
vim
exemplo, você pode verificar a versão e o nível do patch para suportar os recursos que versões anteriores ou versões compiladas com um conjunto de recursos diferente não possuem. Exemplo de fragmento de.vimrc
:fonte
uname -s
é comouname
. uname significa nome Unix.-s
?uname
sozinho , tem sido a maneira canônica de fazer isso há décadas e é especificado pelo POSIX. O originaluname
(no PWB Unix) não teve nenhuma opção.-s
resposta e lembre-me disso para meus futuros scripts.set
realmente deveriam ser U + 201C e U + 201D em vez de U + 0022?Se você se preocupa apenas com arquivos que são realmente executados, como .bash_profiles e amigos, você pode se safar usando, 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, se você tiver atualmente no Linux:
e no Mac OS X:
(onde os
-x
OS Xls
fazem algo que o GNU ls faz por padrão), eles podem ser combinados em algo assim:O único requisito, então, é que
uname -s
funcione da mesma maneira (deve ser, pois ambos os sistemas são razoavelmente POSIX-y e uname-s é exigido pelo POSIX (obrigado Marco por apontar isso )) e que a sintaxe para ramificação de scripts de shell com base em uma comparação de string é o mesmo. Provavelmente você também pode testar com base em outros critérios; por exemplo, você pode procurar por / etc / lsb_release, verificar se / proc / sys / kernel / ostype contém "Linux" ou qualquer outro teste que você possa fazer.fonte
Darwin
, acabei de verificar.-o
opção uname não é POSIX e falha em muitos sistemas, por exemplo, Solaris.-s
é obrigatório no POSIX e da maneira mais compatível. IEEE Std 1003.1OSTYPE
não está disponível em um shell POSIX. Ele irá falhar, por exemplo, em uma instalação padrão do FreeBSD e só pode ser usado em.bashrc
ou.zshrc
. Ele não funciona de forma confiável em.profile
,.alias
etc. Uma vez que estamos falando de compatibiliy aqui, eu aconselho a ir a maneira segura, em vez de depender de características particulares da Shell, que não são garantidos para estar disponível em todos os sistemas.