web-dev-qa-db-fra.com

Remplacer les commandes Shell d'OS X par les versions de Linux?

Les commandes disponibles par défaut dans le Terminal sous OS X ne semblent pas se comporter comme leurs versions Linux. Comment puis-je les remplacer par les commandes GNU linux actuelles?

Par exemple, sed -i nécessite un "" argument supplémentaire ennuyant. En outre, cela ne fonctionne qu'avec des fichiers texte. C'est inutile.

32
TheOne

Dans le cas général, vous ne pouvez pas (ou ne devriez pas ) remplacer les commandes par défaut. La raison en est que de nombreux scripts d'administration système et des packages tiers s'appuient probablement sur ces commandes pour se comporter comme ils le font immédiatement sous OS X.

Donc, si vous supprimez simplement les commandes système et les remplacez par GNU équivalents qui ont un comportement ou des arguments de ligne de commande incompatibles, cela cassera probablement quelque chose. Surtout si vous utilisez des logiciels "portés" sous Mac OS X après avoir été conçus à l'origine pour Linux ou BSD, car ces types de programmes sont plus susceptibles de s'appuyer sur des scripts Shell et des commandes système plutôt que d'appeler des API OS X.

Ce que vous pouvez faire, c’est installer un environnement qui installe les utilitaires GNU dans un autre répertoire sans écraser les valeurs par défaut, puis ajustez votre variable d'environnement PATH afin qu'elle donne la priorité aux commandes trouvées dans le répertoire GNU avant même d'effectuer une recherche dans les répertoires système. Vous pouvez câbler cela pour qu'il ne définisse votre PATH de cette manière que si vous démarrez un shell interactif; vous pouvez utiliser Google pour savoir comment procéder avec bash ou poser une autre question sur SU (ou effectuer une recherche, celle-ci ayant probablement déjà été posée) si vous souhaitez le faire.

Un exemple d'un tel environnement est Homebrew qui, par exemple, a GNU sed entre autres choses. Une fois que vous avez installé Homebrew, vous pouvez taper

brew install coreutils

et installez le GNU Coreutils . Ceux-ci vous fourniront sed, date, printf, wc et de nombreux autres outils fournis avec GNU/Linux, mais pas sous OS X. Cependant, pour ne pas "écraser" les binaires OS X par défaut, ils seront préfixés par g par défaut . Donc, après avoir installé Coreutils, si vous voulez utiliser GNU sed, tapez

gsed

Si c'est trop compliqué à taper à chaque fois, vous pouvez ajouter un répertoire "gnubin" à votre PATH et simplement appeler GNU sed avec sed. Vous devrez ajouter ce qui suit à votre ~/.bash_profile:

PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"

Bien sûr, si vous avez besoin d'un environnement Linux allant de soupe à écrou (noyau, X11, compatibilité syscall, etc.), vous devrez exécuter Linux sur une machine virtuelle, telle que VirtualBox . C’est une valeur sûre si vous devez exécuter un logiciel ou des scripts conçus pour Linux.

Homebrew ne vous permettra la compatibilité que pour certaines classes de programmes ne nécessitant pas de comportement spécifique à Linux. Par exemple, inotify est uniquement disponible sous Linux. drm (le gestionnaire de rendu direct) est uniquement disponible sous Linux. Il existe certains autres appels système de bas niveau qui ne sont disponibles que sous Linux et pour lesquels aucun équivalent n'existe sous OS X; par conséquent, le portage de certains programmes de Linux vers OS X peut s'avérer peu pratique ou impossible sans modifications majeures du code.

43
allquixotic

Vous pouvez utiliser un préfixe Gentoo qui prend en charge OS X, vous pouvez le faire en le initialiser , puis en ajoutant les chemins correspondants dans le répertoire de préfixe à votre PATH. Il se peut que cela le fasse déjà pour vous. Une fois que vous avez terminé, vous pouvez utiliser les commandes Gentoo standard pour installer des packages.

emerge coreutils vous donnera les utilitaires GNU standard, par exemple.

Veuillez noter que Gentoo compile par défaut, vous voudrez peut-être configurer un hôte binaire . Cela consiste simplement à utiliser l'une des URL de la seconde moitié de cet article et à la placer dans PORTAGE_BINHOST="... your url here ..." dans ./etc/make.conf dans votre préfixe.

3
Tamara Wijsman

Pour faire suite au message de @ allquixotic, voici les instructions officielles par brew install coreutils

Toutes les commandes ont été installées avec le préfixe 'g'.

Si vous avez vraiment besoin d’utiliser ces commandes avec leur nom habituel, vous pouvez ajouter un répertoire "gnubin" à votre PATH depuis votre bash comme

PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"

De plus, vous pouvez accéder à leurs pages de manuel avec les noms normaux du répertoire "gnuman" sur votre MANPATH à partir de votre bashrc

MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"
1
user72923

En ce qui concerne sed, vous pouvez télécharger un fichier binaire précompilé à partir du projet Rudix . Pour les autres packages Rudix, voir ici et ici .

0
kerny