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 réelles?
Par exemple, sed -i nécessite un "" argument supplémentaire ennuyant. En outre, cela ne fonctionne qu'avec des fichiers texte. C'est inutile.
-i
drapeau est non standard .ed
est pour éditer des fichiers.Réponses:
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 Mac X.
Donc, si vous supprimez simplement les commandes système et les remplacez par des équivalents GNU ayant un comportement ou des arguments de ligne de commande incompatibles, cela cassera probablement quelque chose. Surtout si vous utilisez des logiciels "portés" sur 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 est d'installer un environnement qui installe les utilitaires GNU dans un autre répertoire sans remplacer les valeurs par défaut, puis d' ajuster votre
PATH
variable d'environnement 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 façon que si vous démarrez un shell interactif; vous pouvez google comment faire celabash
ou poser une autre question sur SU (ou la rechercher, car on vous l'a probablement déjà demandé) si vous voulez le faire.Un exemple d'un tel environnement est Homebrew qui, par exemple, utilise GNU
sed
entre autres. Une fois que vous avez installé Homebrew, vous pouvez taperet installez GNU Coreutils . Ceux - ci vous fournira
sed
,date
,printf
,wc
et bien d' autres outils livrés avec GNU / Linux, mais pas OS X. Cependant, pour ne pas par défaut « outrepasser » OS X binaires, ils seront préfixées avecg
par défaut. Donc, après avoir installé Coreutils, si vous voulez utiliser GNU sed, tapezSi 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
:Bien sûr, si vous avez besoin d’un environnement Linux complet (noyau, X11, compatibilité système, 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
n'est disponible que sous Linux.drm
(Direct Rendering Manager) n’est disponible que 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.la source
brew install coreutils
ne comprend passed
. Vous pouvez fairebrew install gnu-sed
cependant cela installegsed
et passed
, même si vous mettez à jour votre$PATH
. J'ai créé un lien symbolique pour masquer les Macsed
:ln -s $(which gsed) $(brew --prefix coreutils)/libexec/gnubin/sed
toutefois, vous devez encoreman gsed
voir la bonne page de manuel.brew install gnu-sed --default-names
va l'installer en tant quesed
--default-names
, vous pouvez installer avec les commandes g-prefixed, puis installer oh-my-zsh (hautement recommandé) et activer le plug-in gnu-utils.Vous pouvez utiliser un préfixe Gentoo prenant en charge OS X, vous pouvez le faire en l’ amorçant puis en ajoutant les chemins correspondants dans le répertoire du 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 l’installation de packages.
emerge coreutils
vous obtiendrez par exemple les utilitaires GNU standard.Veuillez noter que Gentoo compile par défaut, vous pouvez éventuellement configurer un hôte binaire . Ceci est juste en utilisant l' une des URL sur la seconde moitié de cet article et de le placer dans
PORTAGE_BINHOST="... your url here ..."
dans./etc/make.conf
votre préfixe.la source
Pour faire suite au message de @ allquixotic, voici les instructions officielles
brew install coreutils
la source
En ce qui
sed
vous concerne, vous pouvez télécharger un fichier binaire précompilé à partir duRudix
projet. Pour d'autresRudix
forfaits, voir ici et ici .la source