OK, przepraszam, jeśli to coś głupiego, ale brakuje mi pomysłów.
Cel: przyłączyć się /usr/local/bin
do$PATH
Problem: $PATH
nie zrobię tego, czego chcę lub oczekuję
Jak się tu dostałem: chcę zacząć uczyć się programowania, więc czuję się swobodnie, grzebiąc pod maską, ale nie mam dużego doświadczenia. Zainstalowałem fish
powłokę (ponieważ jest przyjazna!) Za pomocą homebrew
i ustawiłem ją jako moją domyślną powłokę (poniżej system prefs>users & groups>advanced
). W pewnym momencie pobiegłem, brew doctor
aby sprawdzić, czy wszystkie moje instalacje były koszerne, i zasugerowałem, żebym przeniósł /usr/local/bin
się na przód, $PATH
aby móc użyć instalacji git
zamiast kopii systemowej. W porządku - ale pomiędzy path_helper
i fish
coś się działo z $PATH
tym , co wymknęło mi się spod kontroli i nigdy nie udało mi się ułożyć ścieżek we właściwy sposób.
Środowisko: OSX 10.8.2, przeniesieni z 10.7ish, ze xcode
i zainstalowane DevTools, plus x11
, homebrew
ifish
Więcej info: Mam ustawić domyślną powłokę Powrót Mój użytkownika do bash
i próbowali różnych skorup thru terminal.app
- bash
, fish
, sh
. Przeniosłem /usr/local/bin
się na szczyt, /etc/paths
ale nic to nie zmieniło. Przejrzałem różne config.fish
pliki i skomentowałem rzeczy, które mogą zepsuć $ PATH, nie pomogły. Mam następujące pliki /etc/paths.d/
:
./10-homebrew
zawierający /usr/local/bin
./20-fish
zawierający /usr/local/Cellar/fish/1.23.1/bin
./40-XQuartz
zawierający /opt/X11/bin
Dodałem set +x
do siebie profile
i kiedy zaczynam terminal.app
otrzymuję:
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$
Wygląda więc na to przebiegów path_helper, ale potem działa echo $PATH
siatek mi /usr/bin:/bin:/usr/sbin:/sbin
. Wygląda na to, że path_helper
nie robi już tego, co powinien?
Jestem pewien, że istnieje tu pewne dobrze zdefiniowane zachowanie, którego nie rozumiem lub próbowałem to naprawić. Proszę pomóż!
fish
, tworząc~/.config/fish/config.fish
z,set PATH /usr/local/bin $PATH
ale nadal mam problem zpath_helper
pozornie nie działaniem tak, jak powinien, a$PATH
zatem jest niepełny. Wciąż mam też problem z różnymi$PATH
skryptami, aplikacjami uruchamianymi z GUI itp.Odpowiedzi:
rozwiązanie:
wybierz, jeśli chcesz ustawienie systemowe lub konfigurację użytkownika i edytuj odpowiedni plik konfiguracyjny, nie używaj path_helper z rybami.
więcej
fish nie źródło / etc / profile, dla konfiguracji całego systemu i konfiguracji użytkownika będzie czytał odpowiednio /etc/fish/config.fish i ~ / .config / fish / config.fish [1].
path_helper jest przeznaczony do używania w powłokach, które pobierają plik profilu systemowego (sh, csh i ich pochodne). Ponieważ 10.7 path_helper wydaje się honorować porządek w / etc / paths, AFAIR nie zrobił tego w 10.6 i trudniej sobie z tym poradzić.
Jeśli naprawdę chcesz używać path_helper z rybami, musisz przeanalizować dane wyjściowe, ponieważ zapewni on tylko składnię sh i csh z opcjami -s i -c .
Coś jak
powinien wykonać pracę:
[1] http://ridiculousfish.com/shell/user_doc/html/index.html#initialization
źródło
if status --is-login eval (/usr/libexec/path_helper -c | sed -e 's/setenv/set -x/' -e 's/:/ /g' -e 's/[";]//g') end
- działa dobrze z rybą 2 i Mac OS 10.8.3Absolutnie nie mam pojęcia o /etc/paths.d, path_helper, i c., Które wydają mi się nadmiernymi komplikacjami, ale następujące na końcu twojego ~ / .bashrc powinny cię naprawić:
Mam nadzieję że to pomoże!
źródło
path_helper
to narzędzie specyficzne dla OSX, które podobno ustawia się$PATH
przy logowaniu, czytając/etc/paths
odtąd/etc/paths.d/*
. W każdym razie rozumiem, że twoja sugestia powinna mnie naprawićbash
, ale tak naprawdę chcę, aby działałafish
(i konsekwentnie w całym systemie, jeśli nie jest to zbyt wiele do przewidzenia).Dziękujemy Aaronowi za odpowiedź i wszystkim, którzy odpowiedzieli na inne podobne pytania na stronach stosu wymiany. Dla potomności, oto co wymyśliłem:
path_helper
jest wywoływany/etc/profile
przez składnięeval '/usr/libexec/path_helper -s'
(gdzie apostrofy są tak naprawdę odwrotnością). Jak manekin, nie wiedziałem, jak działają backticksy, dlatego z jakiegoś powodu zmieniłem je na cytaty. To przerwało mojeprofile
ładowaniepath_helper
. Zastąpiłem tyknięcia i teraz działa tak, jak powinno (oczywiście).set PATH /usr/local/bin $PATH
w moim~/.config/fish/profile.fish
zapewnia, że otrzymam odpowiednią kolejność w mojej preferowanej powłoce, ale dopókipath_helper
działa, może być zbędna.$PATH
zestaw jest dostępny dla skryptów, aplikacji GUI itp., Wydaje się, że jest to sprzeczka między ...launchd.conf
ienvironment.plist
wciąż badaniem tego.źródło