Finder経由で起動したアプリは、.bash_profile
で設定されたPATHを尊重しないようです。 そのため、IDE (Intellij) からコードを実行しようとすると、ターミナルで通常パスに追加される /usr/local/bin
にあるプログラムにアクセスできなくなります。
どうやら、.MacOSX/environment.plist`がこれを行うための方法]1だったようですが、Lionではもう機能しません。
Finderで起動するアプリケーションのPATH
を設定するにはどうしたらいいでしょうか?
10.8ではなく10.7をお使いの場合は、以下の解決策でうまくいきます。
eclipseでも同じ問題がありましたが、.bash_profile
に以下を追加したところ、うまくいきました。
export PATH=some_path:another_path
launchctl setenv PATH $PATH
元のパスをそのままにしたい場合は
p=$(launchctl getenv PATH)
launchctl setenv PATH /my/new/path:$p
代わりに、launchctl setenv PATH /my/new/path:$(launchctl getenv PATH)
を使ってください。
Note: launchctlのPATHを変更しても、Dockが"restarted"されるまで反映されません。 新しい Dock プロセスは、現在のプロセスがこのコマンドで終了した後、自動的に開始されます。
killall Dock
新しい問題への回答は、サンプルで説明するのが簡単なので、別の回答を書くことにしました。
ツール(IDE)の起動時に環境変数を読み込む方法は、eclipseでできるようなもので、お使いのツール(IDE)にも同様の仕組みがあるはずです。
eclipseでできる方法 - https://stackoverflow.com/questions/829749/launch-mac-eclipse-with-environment-variables-set
(環境変数について少し書き直しました))
Eclipseのアプリケーション・バンドル・ディレクトリ /Applications/eclipse/Eclipse.app/Contents/MacOS
に "eclipse.sh" という空のテキストファイルを作成する。
eclipse.shをテキストエディタで開き、以下の内容を入力してください。
#!/bin/sh
. ~/.bash_profile
logger "`dirname \"$0\"`/eclipse"
exec "`dirname \"$0\"`/eclipse" $@
ターミナルでシェルスクリプトeclipse.shの実行フラグを設定します。
chmod +x /Applications/eclipse/Eclipse.app/Contents/MacOS/eclipse.sh` を実行します。
Eclipse.app Info.plist を開き、CFBundleExecutable キーの値を eclipse から eclipse.sh に変更します。
MacOS X は Eclipse.app's Info.plist が変更されたことを自動的には検出しません。そのため、ターミナルで lsregister コマンドを使用して LaunchService データベースを強制的に更新する必要があります。
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -v -f /Applications/eclipse/Eclipse.app
を使ってターミナルで LaunchService データベースを強制的に更新する必要があります。
次にDockまたはFinderからEclipse.appを起動すると、環境変数が設定されているはずです。
Mountain Lion では /etc/paths
と /etc/launchd.conf
を編集しても何の効果もありません!
Apple's Developer Forumsによると。
"アプリのInfo.plistにLSEnvironment".Default.Defaultが含まれるように変更します。 辞書に、必要な環境変数を入れてください。
~/.MacOSX/environment.plist はサポートされなくなりました."
そこで、アプリの Info.plist
を直接編集("AppName.app"(ここではSourceTree)を右クリック→"Show package contents
" )してみたところ、以下のようになりました。
パッケージの内容を表示する]1。
という新しいキー/ディクトペアを追加しました。
<key>LSEnvironment</key>
<dict>
<key>PATH</key>
<string>/Users/flori/.rvm/gems/ruby-1.9.3-p362/bin:/Users/flori/.rvm/gems/ruby-1.9.3-p362@global/bin:/Users/flori/.rvm/rubies/ruby-1.9.3-p326/bin:/Users/flori/.rvm/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:</string>
</dict>
(参照: LaunchServicesKeys Documentation at Apple)
。
これで、アプリ(私の場合はSourceTree)は指定されたパスを使い、git 1.9.3で動作するようになりました :-)
PS: もちろん、特定のパスの必要性に応じて、パスのエントリを調整する必要があります。