OK, je m'excuse si c'est quelque chose de stupide, mais je suis à court d'idées.
Objectif: ajouter /usr/local/bin
à$PATH
Problème: $PATH
ne fera pas ce que je veux ou ce que j'attends
Comment je suis arrivé ici: je veux commencer à apprendre à programmer, donc je suis à l'aise de jouer sous le capot, mais je n'ai pas beaucoup d'expérience. J'ai installé le fish
shell (car il est convivial!) En l'utilisant homebrew
et le définissant comme mon shell par défaut (en dessous system prefs>users & groups>advanced
). À un moment donné, j'ai couru brew doctor
pour voir si mes installations étaient toutes casher, et cela m'a suggéré de passer /usr/local/bin
à l'avant de $PATH
sorte que je puisse utiliser mon installation de git
plutôt que la copie système. Très bien - mais entre path_helper
et fish
, quelque chose se passait $PATH
hors de mon contrôle, et je ne pourrais jamais obtenir les chemins arrangés de la bonne manière.
Environnement: Mac OS X 10.8.2, mis à jour à partir 10.7ish, avec xcode
et devtools installé, plus x11
, homebrew
etfish
Plus d' infos: J'ai mis dos shell par défaut de mon utilisateur bash
, et a essayé une variété de coquillages à travers terminal.app
- bash
, fish
, sh
. Je me suis déplacé /usr/local/bin
au sommet de /etc/paths
mais cela n'a rien changé. J'ai regardé à travers les différents config.fish
fichiers et commenté des trucs qui pourraient jouer avec $ PATH, n'a pas aidé. J'ai les fichiers suivants dans /etc/paths.d/
:
./10-homebrew
contenant /usr/local/bin
./20-fish
contenant /usr/local/Cellar/fish/1.23.1/bin
./40-XQuartz
contenant /opt/X11/bin
J'ai ajouté set +x
à mon profile
et quand je commence, terminal.app
je reçois:
Last login: Mon Oct 1 13:31:06 on ttys000
+ '[' -x /usr/libexec/path_helper ']'
+ eval '/usr/libexec/path_helper -s'
++ /usr/libexec/path_helper -s PATH="/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/Cellar/fish/1.23.1/bin:/opt/X11/bin";
export PATH;
+ '[' /bin/bash '!=' no ']'
+ '[' -r /etc/bashrc ']'
+ . /etc/bashrc
++ '[' -z '\s-\v\$ ' ']'
++ PS1='\h:\W \u\$ '
++ shopt -s checkwinsize
++ '[' Apple_Terminal == Apple_Terminal ']'
++ '[' -z '' ']'
++ PROMPT_COMMAND='update_terminal_cwd; '
++ update_terminal_cwd
++ local 'SEARCH= '
++ local REPLACE=%20
++ local PWD_URL=file://Chriss-iMac.local/Users/c4
++ printf '\e]7;%s\a' file://Chriss-iMac.local/Users/c4
Chriss-iMac:~ c4$
Il semble donc que path_helper s'exécute, mais ensuite l'exécution echo $PATH
me met en réseau /usr/bin:/bin:/usr/sbin:/sbin
. Donc, on dirait qu'il path_helper
ne fait même plus ce qu'il est censé faire?
Je suis sûr qu'il y a un comportement bien défini ici que je ne comprends pas, ou j'ai falsifié quelque chose en essayant de le réparer. Aidez-moi!
fish
en créant~/.config/fish/config.fish
avecset PATH /usr/local/bin $PATH
mais j'ai toujours le problème depath_helper
ne pas fonctionner comme il se doit et$PATH
donc d'être incomplet. Ont également toujours le problème de différents$PATH
pour les scripts, les applications démarrées à partir de l'interface graphique, etc.Réponses:
Solution:
choisissez si vous voulez un paramètre à l'échelle du système ou une configuration utilisateur et éditez le fichier de configuration approprié, n'utilisez pas path_helper avec fish.
plus
fish ne source pas / etc / profile, pour le système et la configuration utilisateur, il lira respectivement /etc/fish/config.fish et ~ / .config / fish / config.fish [1].
path_helper est destiné à être utilisé pour les shells qui source un fichier de profil à l'échelle du système (sh, csh et leurs dérivés). Puisque 10.7 path_helper semble honorer l'ordre dans / etc / chemins, AFAIR ne l'a pas fait dans 10.6 et c'était plus difficile à gérer.
Si vous voulez vraiment utiliser path_helper avec fish, vous devrez analyser sa sortie car elle ne fournira que la syntaxe sh et csh avec les options -s et -c .
Quelque chose comme
devrait faire le travail:
[1] http://ridiculousfish.com/shell/user_doc/html/index.html#initialization
la source
if status --is-login eval (/usr/libexec/path_helper -c | sed -e 's/setenv/set -x/' -e 's/:/ /g' -e 's/[";]//g') end
- fonctionne bien ici avec fish 2 et Mac OS 10.8.3Je n'ai absolument aucune idée de /etc/paths.d, path_helper, & c., Qui me semblent tous être des complications excessives, mais ce qui suit à la fin de votre ~ / .bashrc devrait vous donner raison:
J'espère que cela t'aides!
la source
path_helper
est un utilitaire spécifique à OSX qui se définit soi-disant$PATH
lors de la connexion en lisant/etc/paths
puis/etc/paths.d/*
. Quoi qu'il en soit, je comprends que votre suggestion devrait me corrigerbash
, mais je veux vraiment qu'elle fonctionnefish
(et de manière cohérente dans tout le système, si ce n'est pas trop à attendre).Merci à Aaron d'avoir répondu et à tous ceux qui ont répondu à d'autres questions similaires sur les sites stackexchange. Pour l'amour de la postérité, voici ce que j'ai compris:
path_helper
est appelé depuis/etc/profile
, par la syntaxeeval '/usr/libexec/path_helper -s'
(où les apostrophes sont en fait des backticks). Comme un mannequin, je ne savais pas comment les backticks fonctionnaient, et je les avais donc changés en citations pour une raison quelconque. Cela m'aprofile
empêché de chargerpath_helper
. Remplacé les tiques arrière et maintenant cela fonctionne comme il se doit (bien sûr).set PATH /usr/local/bin $PATH
dans mon~/.config/fish/profile.fish
garantit que j'obtiens le bon ordre dans mon shell préféré, mais tant qu'ilpath_helper
fonctionne, il peut être redondant.$PATH
est disponible pour les scripts, les applications GUI, etc., il semble que ce soit un mélange entrelaunchd.conf
etenvironment.plist
... toujours en recherche.la source