Comment remplacer les utilitaires Mac OS X par des utilitaires centraux GNU?
179
J'ai trouvé qu'il y a quelques différences entre la commande d'utilitaire que j'ai utilisée sur Mac OSX et Linux. Je veux faire de mon expérience unie.
Comment pourrais-je remplacer tous mes utilitaires mac par des utilitaires GNU?
Je sympathise avec vos frustrations, mais je crois qu’à long terme, leur remplacement rendra plus frustrante - Après avoir essayé de faire la même chose, je vous recommande de l’utiliser homebrewcomme indiqué ci-dessous, puis d’apprendre à utiliser les utilitaires avec un g( gsed, greadlink, etc.) au lieu de remplacer les utilitaires système.
Je ne suis pas d'accord avec @cwd, l'utilisation --with-default-namesn'affecte que l'utilisateur local. Cela pourrait être un problème avec les utilitaires de terminal orientés mac, mais si vous utilisez homebrew pour tout, vous pouvez également prétendre que vous utilisez Linux. Mélangé à iterm2, cela fonctionne très bien pour moi. Je peux fondamentalement prétendre que je suis chez moi avec mes boîtes Linux.
Ray Foss
Réponses:
209
Cela ajoute des liens symboliques pour les utilitaires GNU avec le préfixe g à /usr/local/bin/:
Voir brew search gnupour d'autres forfaits. Si vous souhaitez utiliser les commandes sans préfixe ag, ajoutez par exemple /usr/local/opt/coreutils/libexec/gnubinavant les autres répertoires de votre PATH.
$ brew info coreutils
coreutils: stable 8.21
http://www.gnu.org/software/coreutils
Depends on: xz
/usr/local/Cellar/coreutils/8.20(208 files,9.4M)/usr/local/Cellar/coreutils/8.21(210 files,9.6M)*
https://github.com/mxcl/homebrew/commits/master/Library/Formula/coreutils.rb
==>CaveatsAll commands have been installed with the prefix 'g'.If you really need to use these commands with their normal names, you
can add a "gnubin" directory to your PATH from your bashrc like:
PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH"Additionally, you can access their man pages with normal names if you add
the "gnuman" directory to your MANPATH from your bashrc as well:
MANPATH="/usr/local/opt/coreutils/libexec/gnuman:$MANPATH"
Le premier chemin fonctionne, mais MANPATH a échoué, pourquoi? Est-ce parce que j'utilise OSX10.10? Je me suis fait l'écho de $ MANPATH, et j'ai eu l' /usr/local/opt/coreutils/libexec/gnuman:impression que MANPATH n'était pas inclus. Après avoir commenté la conférence MANPATH dans ma base, je n’ai rien reçu ecoh $MANPATH. Et bien sûr, si j’utilise man pwd, j’ai le manuel BSD. Comment régler ceci?
Zen
2
Pour findutils, vous devez ajouter PATH="/usr/local/Cellar/findutils/4.4.2/bin:$PATH"ce qui n’est pas indiqué dans la sortie de la console d’installation.
Sridhar Sarnobat le
1
De plus, pour obtenir la bonne page de manuel findutils, ajoutez ceci à votre$MANPATH/usr/local/opt/findutils/share/man
Christian Long
1
@Zen: la bonne façon d'initier de MANPATHmanière à maintenir la valeur par défaut du système est le suivant : MANPATH="/usr/local/opt/coreutils/libexec/gnuman:${MANPATH-/usr/share/man}". La clé est dans la construction ${var-default_value}.
dan
49
En outre brew install coreutils, vous pouvez également installer d'autres paquets, comme gnu-sed, grep:
Notez que l' --with-default-namesoption est supprimée depuis janvier 2019, donc chaque fichier binaire doit être ajouté au chemin s'il doit être utilisé sans le gpréfixe.
Notez que brew install gawk(contrairement à tous les autres) remplacera awk(via un lien symbolique /usr/local/bin/awk). Si vous voulez conserver l'original /usr/bin/awk, justerm /usr/local/bin/awk
wisbucky
16
Je ne suis pas sûr que je recommanderais de les remplacer ; Cependant, vous pouvez les installer sur un chemin différent et les utiliser de cette façon. Globalement, si vous venez de Linux et que vous souhaitez accéder à des utilitaires plus "génériques" * nix et à un système similaire à apt, je vous conseillerais donc de vous pencher sur Macports:
http://www.macports.org
Il permet, par exemple, d'utiliser le dernier "générique" GCC, par opposition à / en plus du GCC inclus d'Apple, juste à titre d'exemple.
Par exemple, tar et zip de Mac OS X connaissent des métadonnées, contrairement aux versions GNU.
Lhf
1
Il existe des applications fournies par Apple, qui ne sont que des interfaces graphiques pour certains outils en ligne de commande. Si vous les remplacez, les applications risquent de se comporter de manière étrange.
Ɱark ƭ
Droite; quelque chose comme Macports les ajoute, cela ne les remplace pas.
Jonathan
Si vous souhaitez utiliser les utilitaires GNU par défaut avec MacPorts, vous pouvez ajouter /opt/local/libexec/gnubinà l'avant de votre PATHvariable d'environnement.
markshep
8
J'ai écrit un script pour faire exactement cela! Le script peut être consulté ici (ou ci-dessous). Cependant, je ne peux pas toujours garantir que ce message reflètera la dernière version du script lié précédemment.
Lors de l'exécution du script, Homebrew sera installé (s'il ne l'est pas déjà), tous les utilitaires GNU associés seront installés (si ce n'est déjà fait) et la PATHvariable sera construite à partir des utilitaires installés.
#!/bin/bash# Install Homebrew (if not already installed)
ruby -e "$(curl -fsSL "\
"https://raw.githubusercontent.com/Homebrew/install/master/install)"# Install required packages from Homebrew
brew tap homebrew/dupes
brew install coreutils binutils diffutils ed findutils gawk gnu-indent gnu-sed \
gnu-tar gnu-which gnutls grep gzip screen watch wdiff wget bash gdb gpatch \
m4 make nano file-formula git less openssh python rsync svn unzip vim \
--default-names --with-default-names --with-gettext --override-system-vi \
--override-system-vim --custom-system-icons
# Empty the .bash_path file that holds GNU paths>~/.bash_path
# Build PATH variable script in ~/.bash_pathfor i in/usr/local/Cellar/*/*/bin;do
echo 'export PATH="'$i':$PATH"'>>~/.bash_path
donefor i in/usr/local/Cellar/*/*/libexec/gnubin;do
echo 'export PATH="'$i':$PATH"'>>~/.bash_path
donefor i in/usr/local/Cellar/*/*/share/man;do
echo 'export MANPATH="'$i':$MANPATH"'>>~/.bash_path
donefor i in/usr/local/Cellar/*/*/libexec/gnuman;do
echo 'export MANPATH="'$i':$MANPATH"'>>~/.bash_path
done# Check if .bash_path is being called from .bash_profile
PATCH=`grep "~/.bash_path" ~/.bash_profile`if["$PATCH"==""];then# Add Ubuntu-style PS1 to .bash_profile
cat <<EOF >~/.bash_profile
export PS1="\[\033[1;32m\]\u@\h\[\033[0m\]:\[\033[1;34m\]\w\[\033[0m\]# "
EOF
# Add .bash_path to .bash_profile
echo "source ~/.bash_path">>~/.bash_profile
fi
N'aimez-vous pas les votes négatifs sans commentaire critique? Merci pour le script.
Justin Force
@JustinForce Pas de problème! Merci pour votre retour.
Clay Freeman
2
-1. Ce script fait trop de magie. Tout le .bash_pathmélange n'est pas vraiment nécessaire si vous suivez les réponses de @ user495470 et @ xuhdev. Et changer de PS1 est complètement hors du champ de cette question.
Greg Dubicki
1
@GregDubicki malheureusement, le chemin bash "mangling" est requis pour certains de ces paquets. Vous pouvez vérifier cela par vous-même. Concernant le changement de PS1: ce script est destiné à un usage personnel. Quiconque souhaite revenir en arrière peut le faire très facilement.
Clay Freeman
5
J'ai écrit un script qui transforme de manière transparente la CLI macOS en une nouvelle expérience de la CLI GNU / Linux en
installer les programmes GNU manquants
mettre à jour des programmes GNU obsolètes
remplacement des programmes BSD préinstallés par leur implémentation GNU préférée
installation d'autres programmes communs aux distributions populaires GNU / Linux
Essayer de lancer la première commande ( git clone [email protected].:fabiomaia/linuxify.git) Il a d'abord dit "L'authenticité de l'hôte 'github.com' ne peut pas être établie, etc.". J'ai tapé yeset appuyé sur Entrée. Puis il a dit [email protected]: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.Qu'est-ce qui ne va pas?
izogfif
@izogfif Essayez plutôt le clonage avec HTTPSgit clone https://github.com/fabiomaia/linuxify.git
fabiomaia
1
Oui, ça a marché. Veuillez mettre à jour votre réponse (également, supprimez ces dollars au début - ils sont copiés lorsque vous sélectionnez du texte et copiés-collés dans la console).
homebrew
comme indiqué ci-dessous, puis d’apprendre à utiliser les utilitaires avec ung
(gsed
,greadlink
, etc.) au lieu de remplacer les utilitaires système.--with-default-names
n'affecte que l'utilisateur local. Cela pourrait être un problème avec les utilitaires de terminal orientés mac, mais si vous utilisez homebrew pour tout, vous pouvez également prétendre que vous utilisez Linux. Mélangé à iterm2, cela fonctionne très bien pour moi. Je peux fondamentalement prétendre que je suis chez moi avec mes boîtes Linux.Réponses:
Cela ajoute des liens symboliques pour les utilitaires GNU avec le préfixe g à
/usr/local/bin/
:Voir
brew search gnu
pour d'autres forfaits. Si vous souhaitez utiliser les commandes sans préfixe ag, ajoutez par exemple/usr/local/opt/coreutils/libexec/gnubin
avant les autres répertoires de votrePATH
.la source
shiny-and-gnu.rb
dans github.com/al-the-x/homebrew-mine/usr/local/opt/coreutils/libexec/gnuman:
impression que MANPATH n'était pas inclus. Après avoir commenté la conférence MANPATH dans ma base, je n’ai rien reçuecoh $MANPATH
. Et bien sûr, si j’utiliseman pwd
, j’ai le manuel BSD. Comment régler ceci?findutils
, vous devez ajouterPATH="/usr/local/Cellar/findutils/4.4.2/bin:$PATH"
ce qui n’est pas indiqué dans la sortie de la console d’installation.findutils
, ajoutez ceci à votre$MANPATH
/usr/local/opt/findutils/share/man
MANPATH
manière à maintenir la valeur par défaut du système est le suivant :MANPATH="/usr/local/opt/coreutils/libexec/gnuman:${MANPATH-/usr/share/man}"
. La clé est dans la construction${var-default_value}
.En outre
brew install coreutils
, vous pouvez également installer d'autres paquets, commegnu-sed
,grep
:Notez que l'
--with-default-names
option est supprimée depuis janvier 2019, donc chaque fichier binaire doit être ajouté au chemin s'il doit être utilisé sans leg
préfixe.Ancienne référence (quand
--with-default-names
était disponible): http://www.topbug.net/blog/2013/04/14/install-and-use-gnu-command-line-tools-in-mac-os-x/la source
brew install gawk
(contrairement à tous les autres) remplaceraawk
(via un lien symbolique/usr/local/bin/awk
). Si vous voulez conserver l'original/usr/bin/awk
, justerm /usr/local/bin/awk
Je ne suis pas sûr que je recommanderais de les remplacer ; Cependant, vous pouvez les installer sur un chemin différent et les utiliser de cette façon. Globalement, si vous venez de Linux et que vous souhaitez accéder à des utilitaires plus "génériques" * nix et à un système similaire à apt, je vous conseillerais donc de vous pencher sur Macports: http://www.macports.org
Il permet, par exemple, d'utiliser le dernier "générique" GCC, par opposition à / en plus du GCC inclus d'Apple, juste à titre d'exemple.
la source
/opt/local/libexec/gnubin
à l'avant de votrePATH
variable d'environnement.J'ai écrit un script pour faire exactement cela! Le script peut être consulté ici (ou ci-dessous). Cependant, je ne peux pas toujours garantir que ce message reflètera la dernière version du script lié précédemment.
Lors de l'exécution du script, Homebrew sera installé (s'il ne l'est pas déjà), tous les utilitaires GNU associés seront installés (si ce n'est déjà fait) et la
PATH
variable sera construite à partir des utilitaires installés.la source
.bash_path
mélange n'est pas vraiment nécessaire si vous suivez les réponses de @ user495470 et @ xuhdev. Et changer de PS1 est complètement hors du champ de cette question.J'ai écrit un script qui transforme de manière transparente la CLI macOS en une nouvelle expérience de la CLI GNU / Linux en
https://github.com/fabiomaia/linuxify
Il vous permet également de tout annuler facilement.
la source
git clone [email protected].:fabiomaia/linuxify.git
) Il a d'abord dit "L'authenticité de l'hôte 'github.com' ne peut pas être établie, etc.". J'ai tapéyes
et appuyé sur Entrée. Puis il a dit[email protected]: Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
Qu'est-ce qui ne va pas?git clone https://github.com/fabiomaia/linuxify.git