$ PATHは私を混乱させています


10

わかりませんでした。申し訳ありませんが、アイデアが不足しています。

目標:先頭に追加/usr/local/binします$PATH

問題: $PATH私がやりたいことや期待したことができない

私がここに来た方法:私はプログラムの学習を開始したいので、ボンネットの下で快適にいじり始めていますが、多くの経験がありません。私はfish(使いやすいから)を使用してシェルをインストールし、homebrewそれをデフォルトのシェル(の下system prefs>users & groups>advanced)として設定しました。ある時点でbrew doctor、インストールがすべてコーシャであるかどうかを確認するために走り、システムコピーではなくのインストールを使用できるよう/usr/local/binに、前に移動することを提案しました。結構です-との間で、私の手に負えないことが起こっていて、パスを正しい方法で配置することができませんでした。$PATHgitpath_helperfish$PATH

環境: OSX 10.8.2、と、10.7ishからアップグレードxcodeおよびデベロッパーツールがインストールされ、プラスx11homebrewと、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

私は私に追加set +xしました、profileそして私が始めるとき私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 $PATHnetsになります/usr/bin:/bin:/usr/sbin:/sbin。だから、path_helperもう想定されていることをしていないように見えますか?

私には理解できない明確に定義された動作がいくつかあるか、または修正しようとしているときに何かを中断したと確信しています。助けてください!


fish:で作成すること~/.config/fish/config.fishで機能させることができますset PATH /usr/local/bin $PATHが、path_helperどうやら正常に機能しない$PATHため、不完全であるという問題があります。また、まだ別の問題持っている$PATHなど、GUIから起動アプリ、スクリプトのために
Chris4d

回答:


5

解決:

システム全体の設定とユーザー設定のどちらが必要かを選択し、適切な設定ファイルを編集します。fishでpath_helperを使用しないでください。

もっと

fishは/ etc / profileを供給しません。システム全体およびユーザー構成の場合、それぞれ/etc/fish/config.fishおよび〜/ .config / fish / config.fishを読み取ります[1]。

path_helperは、システム全体のプロファイルファイル(sh、cshおよびそれらの派生物)をソースとするシェルで使用するためのものです。10.7 path_helperは/ etc / pathsの順序を尊重するように見えるので、AFAIRは10.6ではそれを行わなかったため、対処が困難でした。

fishでpath_helperを本当に使用したい場合は、-sおよび-cオプションを指定したshおよびcsh構文しか提供しないため、その出力を解析する必要があります。

何かのようなもの

/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


すごい!これは私が今持っているものです:if status --is-login eval (/usr/libexec/path_helper -c | sed -e 's/setenv/set -x/' -e 's/:/ /g' -e 's/[";]//g') end-ここでfish 2とMac OS 10.8.3で
正常に

3

/etc/paths.d、path_helper、&c。についてはまったくわかりませんが、これらはすべて私にとって過度の複雑化のように見えますが、〜/ .bashrcの最後にある次のようにすれば正しいはずです。

 PATH=/usr/local/bin:$PATH

お役に立てれば!


おかげでアーロン- path_helperおそらく設定していることOSX固有のユーティリティです$PATHから読み取ることによって、ログイン時に/etc/paths当時と/etc/paths.d/*。とにかく、私はあなたの提案が私のためbashに修正する必要があることを理解していますが、私は実際にそれが機能することを望んでいますfish(そしてそれが期待しすぎない場合は一貫してシステム全体で)。
Chris4d、2012年

ああ、ごめんなさい。私は自分自身はOS Xユーザーではありませんが、残念ですが、Googleを少しバッシュすると、この Stack Overflowの質問はあなたが求めているものに似ているように見えます-とはいえ、私は私自身がOS Xユーザーであり、質問をざっと(読んで:不注意に)見ただけでbashだけに関心があると思ったので、ここで答えました。それが役に立てば幸い、すべて同じ
アーロン・ミラー

3

回答してくれたAaronと、stackexchangeサイトで他の同様の質問に回答してくれたすべての人に感謝します。後世のために、ここに私が考え出したものがあります:

  1. path_helper/etc/profile構文から、から呼び出されますeval '/usr/libexec/path_helper -s'(アポストロフィは実際にはバッククォートです)。ダミーのように、バッククォートがどのように機能するかわからなかったため、何らかの理由でバッククォートを引用符に変更しました。これは私profileをロードから壊しましたpath_helper。バックティックを置き換え、今はそれが(もちろん)正常に機能するようになりました。
  2. set PATH /usr/local/bin $PATH私の中で使用~/.config/fish/profile.fishすると、優先シェルで正しい順序が確実に得られますが、path_helper機能する限り、冗長になる可能性があります。
  3. 完全にすることを確保するため$PATHなどのスクリプト、GUIアプリケーションに利用可能である、間をアップ投げるように見えるlaunchd.confし、environment.plistまだその1を研究して...。

1
先日読んだだけですが(ソースを思い出せません)、10.8では、すべてのアプリでパスを表示する確実な方法が提供されなくなりました。特に、environment.plistが読み込まれなくなったことを覚えています。私はlaunchd.confを漠然と認識しているので、うまくいくかもしれませんが、記事ではそうはならないと示唆していると思います。
echristopherson

1
さらにフォローアップ:path_helperは魚ではまったく機能しないようです。cshまたはbash構文を出力しますが、どちらも互換性がありません。代わりに、〜/ .config / fish / config.fish(fish起動スクリプト)を使用して/etc/paths.d/*をcatし、$ PATHに追加できます。それが誰かを助けることを願っています!
Chris4d 2013

私の答えまで読んだ?あなたのフォローアップの4か月前から存在しています
anddam
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.