Bash sous Linux vs Mac OS

27

J'achète un iMac. Je travaille sur Linux depuis longtemps et je fais un tas de scripts bash. Je me demandais si toutes les commandes et fonctionnalités de bash sont disponibles sur Mac OS? Tout le monde a une expérience avec les scripts bash Mac? J'apprécie votre contribution.

alex
la source

Réponses:

32

Bash lui-même sera essentiellement le même. Il y aura quelques petites différences, mais aucune d'entre elles n'affectera la portabilité de vos scripts.

Le problème majeur est que les coreutils MacOS sont basés sur FreeBSD alors que les utilitaires auxquels vous êtes habitués sont très probablement issus du projet GNU. Les coreutils FreeBSD ne sont pas toujours compatibles avec les coreutils GNU. Il existe des différences de performances et de comportement entre les versions GNU et FreeBSD de sed , grep , ps et d' autres utilitaires .

Vous pouvez installer les coreutils GNU mais ils ont des g-préfixes (par exemple gcatpour cat). Ce n'est pas une bonne idée de remplacer les coreutils MacOS par les coreutils GNU.

Communauté
la source
6
Il convient de préciser que l'utilisation des utilitaires de base basés sur FreeBSD standard peut affecter la portabilité de vos scripts (par exemple, psa des indicateurs différents, tout comme grep). Je me suis cogné la tête contre le mur plusieurs fois en essayant de comprendre pourquoi mon script Ubuntu ne produisait pas la même sortie sur mon Mac.
Chris Gregg
1
Si vous souhaitez écrire vos scripts pour être portables, www2.opengroup.org/ogsys/jsp/publications/mainPage.jsp est un excellent endroit pour obtenir les spécifications strictement standard des utilitaires et commandes POSIX et XCU.
kojiro
@ChrisGregg: Je suis d'accord. J'ai ajouté un peu à ma réponse pour souligner qu'il y a des incompatibilités entre les deux ensembles d'outils.
5

Si cela est important, bashsur Mac OS X Mountain Lion est toujours la version 3.2. La plupart des distributions Linux de nos jours sont livrées avec 4.x, vous manquerez donc de fonctionnalités de la version 4. À l'heure actuelle, la version 4.2.45 est disponible à partir de Homebrew comme solution de contournement. Je ne sais pas quelle version est dans Mavericks, je ne suis pas sûr que quiconque le sache soit encore autorisé à le dire.

Comme mentionné par d'autres, bashc'est la même chose bash(autre que les versions déjà notées) mais Mac OS X utilise (principalement) un espace utilisateur BSD. De nombreux utilitaires système standard ont des options légèrement différentes ou se comportent légèrement différemment. Ils sont malheureusement trop nombreux pour être listés ici.

bahamat
la source
2
4 ans plus tard, bash sur High Sierra utilise toujours: GNU bash, version 3.2.57 (1) -release (x86_64-apple-darwin17) Copyright (C) 2007 Free Software Foundation, Inc.
Nate Lockwood
4

Installez homebrew (un gestionnaire de paquets) puis installez les versions gnu de certains utilitaires de base:

$ brew install coreutils
$ brew install gnu-sed

Après chaque installation, il montrera les étapes que vous pouvez suivre pour pouvoir simplement appeler dateau lieu de gdatepar exemple, afin que vous puissiez toujours utiliser vos scripts bash Linux sans aucune modification.

Félicitations, vous venez de résoudre 99% de vos problèmes de script multiplateforme.

doyen
la source
3
D'un autre côté, si vos scripts sont réellement destinés à être portables, vous voudrez corriger les scripts, pas les symptômes.
tripleee
2

Une chose qui peut être frustrante venant de Linux vers un Mac, c'est qu'il n'y a pas de /procpseudo-système de fichiers. Cela a cassé un certain nombre de mes scripts Linux, et il peut être difficile de trouver des moyens appropriés pour obtenir les mêmes informations que vous trouvez procdans votre script bash Mac.

Chris Gregg
la source
0

Je suis un utilisateur 'principalement Linux, occasionnel mac' et je trouve que:

bash, ~/.bashrcet ~/.bash_aliasesfonctionnent généralement de la même manière.

Un problème que j'ai trouvé était que l'une des commandes pour changer l'invite de couleur ne fonctionnait pas sur le Mac. À partir de cela et d'autres expériences, j'ai appris à garder une fenêtre de terminal ouverte et connectée lors de la configuration de mon .bashrcfichier. C'est-à-dire que je peux tester une nouvelle fenêtre et trouver des erreurs dans celle qui est toujours connectée.

Michael Durrant
la source