En raison de mon travail, j'ai récemment commencé à utiliser OS X et je l'ai configuré en utilisant homebrew afin d'obtenir une expérience similaire à celle de Linux.
Cependant, il existe de nombreuses différences dans leurs paramètres. Certains n'ont besoin d'être installés que sur un seul système. Comme mes fichiers de points vivent dans un référentiel git, je me demandais quel type de commutateur je pouvais mettre en place, de sorte que certaines configurations ne soient lues que pour le système Linux et d'autres pour OS X.
En ce qui concerne les fichiers dot, je me réfère, entre autres, à .bash_profiles
ou .bash_alias
.
if (exists rcfile.local); source rcfile.local; endif
, traduite dans le fichier rc approprié. Le fichier rc principal j'essaie de garder le système indépendant, tandis que la.local
version a des paramètres spécifiques au système. Si vous voulez tout dans un seul dépôt, vous pouvez avoir des répertoires système et lier symboliquement le fichier rcfile.local à celui du répertoire approprié.Réponses:
Gardez les fichiers dot aussi portables que possible et évitez les paramètres dépendants du système d'exploitation ou les commutateurs qui nécessitent une version particulière d'un outil, par exemple évitez la syntaxe GNU si vous n'utilisez pas le logiciel GNU sur tous les systèmes.
Vous rencontrerez probablement des situations où il est souhaitable d'utiliser des paramètres spécifiques au système. Dans ce cas, utilisez une instruction switch avec les paramètres individuels:
Dans le cas où les fichiers de configuration d'applications arbitraires nécessitent différentes options, vous pouvez vérifier si l'application fournit des commutateurs de compatibilité ou d'autres mécanismes. Pour
vim
, par exemple, vous pouvez vérifier la version et le niveau de correctif pour prendre en charge les fonctionnalités plus anciennes, ou les versions compilées avec un ensemble de fonctionnalités différent, ne l'ont pas. Exemple d'extrait de.vimrc
:la source
uname -s
c'est commeuname
. uname signifie nom Unix.-s
?uname
seul est le moyen canonique de le faire depuis des décennies et est spécifié par POSIX. L'originaluname
(dans PWB Unix) n'a pris aucune option.-s
de cette réponse et je le garderai à l'esprit pour mes futurs scripts.set
sont- elles vraiment censées être U + 201C et U + 201D plutôt que U + 0022?Si vous ne vous préoccupez que des fichiers réellement exécutés, tels que .bash_profiles et amis, vous pourrez peut-être vous en sortir, par exemple
uname
pour vous différencier en fonction du système sur lequel le code s'exécute.Par exemple , complètement non testé et avec la mise en garde que je n'ai pas d'OS X pour essayer, si vous en avez actuellement sur Linux:
et sur Mac OS X:
(où
-x
oblige OS X àls
faire quelque chose que GNU ls fait par défaut), alors ils peuvent être combinés en quelque chose comme ceci:La seule exigence est alors que cela
uname -s
fonctionne principalement de la même manière (il devrait, puisque les deux systèmes sont raisonnablement POSIX-y et uname -s est requis par POSIX (merci Marco de l' avoir signalé )), et que la syntaxe de branchement des scripts shell basé sur une comparaison de chaînes est le même. Vous pouvez également tester en fonction d'autres critères; par exemple, vous pouvez rechercher / etc / lsb_release, vérifier si / proc / sys / kernel / ostype contient "Linux", ou tout autre test que vous pouvez proposer.la source
Darwin
, je viens de vérifier.-o
commutateur uname n'est pas POSIX et échoue sur de nombreux systèmes, par exemple Solaris.-s
est obligatoire sur POSIX et la manière la plus compatible. IEEE Std 1003.1OSTYPE
n'est pas disponible dans un shell POSIX. Il échouera par exemple sur une installation par défaut de FreeBSD et ne peut être utilisé que dans.bashrc
ou.zshrc
. Cela ne fonctionne pas de manière fiable dans.profile
,.alias
etc. Comme nous parlons ici de compatibilité, je vous conseille de suivre la voie la plus sûre, au lieu de vous fier aux fonctionnalités particulières du shell, qui ne sont pas garanties d'être disponibles sur tous les systèmes.