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.
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.
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.
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"