OK, entschuldige, wenn das etwas Dummes ist, aber mir gehen die Ideen aus.
Ziel: prepend /usr/local/bin
zu$PATH
Problem: $PATH
Ich werde nicht tun, was ich will oder erwarte
Wie ich hierher gekommen bin : Ich möchte anfangen, Programmieren zu lernen, damit ich mich unter der Haube wohlfühlen kann, aber nicht viel Erfahrung habe. Ich habe die fish
Shell installiert (weil sie freundlich ist!) homebrew
Und sie als meine Standard-Shell (unter system prefs>users & groups>advanced
) festgelegt. Irgendwann lief ich, um brew doctor
zu sehen, ob meine Installationen alle koscher waren, und es schlug /usr/local/bin
vor $PATH
, dass ich nach vorne gehen sollte, damit ich meine Installation git
anstelle der Systemkopie verwenden konnte. Gut - aber zwischen path_helper
und fish
passierte etwas, $PATH
das außerhalb meiner Kontrolle lag, und ich konnte die Wege nie richtig anordnen.
Umwelt: OSX 10.8.2, von 10.7ish aufgerüstet, mit xcode
und devtools installiert, und x11
, homebrew
undfish
Mehr Info: Ich habe meine Benutzer-Standard - Shell wieder auf bash
und versuchte , eine Vielzahl von Schalen durch terminal.app
- bash
, fish
, sh
. Ich bin nach /usr/local/bin
oben gegangen, /etc/paths
aber es hat nichts geändert. Ich habe die verschiedenen config.fish
Dateien durchgesehen und Dinge auskommentiert, die mit $ PATH zu tun haben könnten, hat nicht geholfen. Ich habe die folgenden Dateien in /etc/paths.d/
:
./10-homebrew
enthält /usr/local/bin
./20-fish
enthält /usr/local/Cellar/fish/1.23.1/bin
./40-XQuartz
enthält /opt/X11/bin
Ich habe set +x
zu meinen profile
und wenn ich beginne terminal.app
ich:
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$
Es sieht also so aus, als würde path_helper ausgeführt, aber dann werden echo $PATH
mir Netze hinzugefügt /usr/bin:/bin:/usr/sbin:/sbin
. Es sieht also so aus, als würde es path_helper
nicht mehr das tun, was es soll?
Ich bin mir sicher, dass es hier ein genau definiertes Verhalten gibt, das ich nicht verstehe, oder ich habe etwas verpfuscht, während ich versucht habe, es zu beheben. Bitte helfen Sie!
fish
durch Erstellen~/.config/fish/config.fish
mit zum Laufen bringen kann,set PATH /usr/local/bin $PATH
aber ich habe immer noch das Problem, dass espath_helper
anscheinend nicht so funktioniert, wie es sollte, und$PATH
daher unvollständig ist.$PATH
Antworten:
Lösung:
Wählen Sie, ob Sie eine systemweite Einstellung oder eine Benutzerkonfiguration wünschen, und bearbeiten Sie die entsprechende Konfigurationsdatei. Verwenden Sie path_helper nicht mit fish.
Mehr
fish gibt / etc / profile nicht an, für die systemweite Konfiguration und die Benutzerkonfiguration wird /etc/fish/config.fish bzw. ~ / .config / fish / config.fish [1] gelesen.
path_helper ist für Shells gedacht, die eine systemweite Profildatei (sh, csh und ihre Derivate) als Quelle verwenden. Da 10.7 path_helper die Reihenfolge in / etc / path zu beachten scheint, hat AFAIR dies in 10.6 nicht getan, und das war schwieriger zu bewältigen.
Wenn Sie path_helper wirklich mit fish verwenden möchten, müssen Sie die Ausgabe analysieren, da nur die Syntax sh und csh mit den Optionen -s und -c bereitgestellt wird.
Etwas wie
sollte den Job machen:
[1] http://ridiculousfish.com/shell/user_doc/html/index.html#initialization
quelle
if status --is-login eval (/usr/libexec/path_helper -c | sed -e 's/setenv/set -x/' -e 's/:/ /g' -e 's/[";]//g') end
- funktioniert hier gut mit Fisch 2 und Mac OS 10.8.3Ich habe absolut keine Ahnung von /etc/paths.d, path_helper usw., die mir alle als übermäßige Komplikationen erscheinen, aber das Folgende am Ende Ihres ~ / .bashrc sollte Sie korrigieren:
Hoffe das hilft!
quelle
path_helper
ist ein OSX-spezifisches Dienstprogramm, das angeblich$PATH
beim Anmelden durch Lesen von/etc/paths
und dann festgelegt wird/etc/paths.d/*
. Wie auch immer, ich verstehe, dass Ihr Vorschlag mich reparieren solltebash
, aber ich möchte, dass er funktioniertfish
(und konsistent im gesamten System, wenn das nicht zu viel zu erwarten ist).Vielen Dank an Aaron für die Antwort und an alle, die andere ähnliche Fragen auf den Stackexchange-Sites beantwortet haben. Um der Nachwelt willen habe ich Folgendes herausgefunden:
path_helper
wird von/etc/profile
durch die Syntax aufgerufeneval '/usr/libexec/path_helper -s'
(wobei die Apostrophe tatsächlich Backticks sind). Wie ein Dummy wusste ich nicht, wie Backticks funktionieren, und hatte sie aus irgendeinem Grund in Anführungszeichen geändert. Dies hat michprofile
vom Laden abgehaltenpath_helper
. Ersetzte die Back-Ticks und jetzt funktioniert es wie es sollte (natürlich).set PATH /usr/local/bin $PATH
in my wird~/.config/fish/profile.fish
sichergestellt, dass ich in meiner bevorzugten Shell die richtige Reihenfolge erhalte. Solange diespath_helper
funktioniert, ist es möglicherweise redundant.$PATH
Ganze für Skripte, GUI-Apps usw. verfügbar ist, scheint es ein Fehler zwischenlaunchd.conf
undenvironment.plist
... zu sein, der dieses noch untersucht.quelle