OK、これが馬鹿げたことならお詫びしますが、私はアイデアが不足しています。
目標: _/usr/local/bin
_を_$PATH
_の前に追加
問題: _$PATH
_は私が望むまたは期待することをしません
どうやってここに来たのか:プログラミングを学び始めたいので、ボンネットの下をいじり回すのは快適ですが、あまり経験がありません。 fish
を使用してhomebrew
シェルをインストールし(わかりやすいため!)、デフォルトのシェルとして設定しました(_system prefs>users & groups>advanced
_の下)。ある時点で、_brew doctor
_を実行して、インストールがすべてコーシャであるかどうかを確認しました。_/usr/local/bin
_を_$PATH
_の前に移動して、git
のインストールを使用できるようにすることを提案しました。システムコピー。結構ですが、_path_helper
_とfish
の間で、_$PATH
_に何かが起こっていて、制御できず、パスを正しい方法で配置できませんでした。
環境: OSX 10.8.2、10.7ishからアップグレード、xcode
とdevtoolsがインストールされ、さらに_x11
_、homebrew
、およびfish
詳細:ユーザーのデフォルトのシェルをbash
に戻し、_terminal.app
_ --bash
、fish
、sh
を介してさまざまなシェルを試しました。 _/usr/local/bin
_を_/etc/paths
_の先頭に移動しましたが、何も変更されませんでした。さまざまな_config.fish
_ファイルを調べて、$ PATHを混乱させる可能性のあるものをコメントアウトしましたが、役に立ちませんでした。 _/etc/paths.d/
_に次のファイルがあります。
_./10-homebrew
_を含む_/usr/local/bin
_
_./20-fish
_を含む_/usr/local/Cellar/fish/1.23.1/bin
_
_./40-XQuartz
_を含む_/opt/X11/bin
_
profile
に_set +x
_を追加し、_terminal.app
_を起動すると次のようになります。
_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$
_
したがって、path_helperが実行されているように見えますが、_echo $PATH
_を実行すると_/usr/bin:/bin:/usr/sbin:/sbin
_になります。それで、_path_helper
_はもう想定されていることをしていないように見えますか?
ここには、私が理解していない明確に定義された動作があるか、修正しようとしているときに何かを中断したと確信しています。助けてください!
回答してくれたAaronと、stackexchangeサイトで他の同様の質問に答えてくれたすべての人に感謝します。後世のために、これが私が理解したことです:
path_helper
は、構文/etc/profile
(アポストロフィは実際にはバッククォートです)によってeval '/usr/libexec/path_helper -s'
から呼び出されます。ダミーのように、バックティックがどのように機能するかわからなかったので、何らかの理由でバックティックを引用符に変更しました。これにより、profile
がpath_helper
の読み込みから壊れました。バックティックを交換すると、(もちろん)正常に機能するようになりました。set PATH /usr/local/bin $PATH
で~/.config/fish/profile.fish
を使用すると、優先シェルで正しい順序を取得できますが、path_helper
が機能する限り、冗長になる可能性があります。$PATH
をスクリプトやGUIアプリなどで利用できるようにするために、launchd.conf
とenvironment.plist
...の間でまだ調査中のトスアップのようです。解決策:
システム全体の設定またはユーザー構成のどちらが必要かを選択し、適切な構成ファイルを編集します。fishではpath_helperを使用しないでください。
もっと
fishは/ etc/profileをソースしません。システム全体とユーザー構成の場合、それぞれ/etc/fish/config.fishと〜/ .config/fish /config.fishを読み取ります[1]。
path_helperは、システム全体のプロファイルファイル(sh、csh、およびそれらの派生物)をソースとするシェルに使用するためのものです。 10.7path_helperは/ etc/pathの順序を尊重しているように見えるので、AFAIRは10.6ではそうではなく、対処するのが困難でした。
本当に魚でpath_helperを使用したい場合は、出力を解析する必要があります。これは、-sおよびでshおよびcsh構文のみを提供するためです。 -cオプション。
何かのようなもの
/usr/libexec/path_helper -c | sed -e 's/setenv/set -x/' -e 's/:/ /g' -e 's/[";]//g'
仕事をする必要があります:
[1] http://ridiculousfish.com/Shell/user_doc/html/index.html#initialization
/etc/paths.d、path_helper、&c。についてはまったくわかりません。これらはすべて、私には過度の複雑さのように見えますが、〜/ .bashrcの最後にある次の内容で正しく理解できます。
PATH=/usr/local/bin:$PATH
お役に立てれば!