
Mac OS Xで環境変数を設定して、GUIアプリケーションで使用できるようにするにはどうすればよいでしょうか。~/.MacOSX/環境.plistまたはログインフック(これらは非推奨)?
答え1
Mountain Lion では、すべて/etc/paths
の/etc/launchd.conf
編集が反映されません。
Apple の開発者フォーラムでは次のように述べられています:
「.app 自体の Info.plist を変更して、必要な環境変数を含む「LSEnvironment」辞書を含めます。
~/.MacOSX/environment.plist はサポートされなくなりました。"
そこで、アプリを直接編集しましたInfo.plist
(「AppName.app」(この場合はSourceTree)を右クリックし、「Show package contents
」)
次のような新しいキー/辞書ペアを追加しました:
<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>
(見る:Apple の LaunchServicesKeys ドキュメント)
これで、アプリ (私の場合は SourceTree) は指定されたパスを使用し、git 1.9.3 で動作します :-)
PS: もちろん、特定のパスのニーズに合わせてパス エントリを調整する必要があります。
答え2
このソリューションは、の機能launchctl
と、起動エージェント昔のログインフックを模倣します。ストアを使用する他のソリューションについてはlaunchd
、この比較ここで使用される発射剤は、/ライブラリ/LaunchAgents/:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>user.conf.launchd</string>
<key>Program</key>
<string>/Users/Shared/conflaunchd.sh</string>
<key>ProgramArguments</key>
<array>
<string>~/.conf.launchd</string>
</array>
<key>EnableGlobbing</key>
<true/>
<key>RunAtLoad</key>
<true/>
<key>LimitLoadToSessionType</key>
<array>
<string>Aqua</string>
<string>StandardIO</string>
</array>
</dict>
</plist>
重要なことは、実行時ロード起動エージェントが可能な限り早く実行されるようにキーを設定します。実際の作業はシェルスクリプトで行われます。/Users/Shared/conflaunchd.sh、これは〜/.conf.launchd のそしてそれを次のものに供給しますlaunchctl
:
#! /bin/bash
#filename="$1"
filename="$HOME/.conf.launchd"
if [ ! -r "$filename" ]; then
exit
fi
eval $(/usr/libexec/path_helper -s)
while read line; do
# skip lines that only contain whitespace or a comment
if [ ! -n "$line" -o `expr "$line" : '#'` -gt 0 ]; then continue; fi
eval launchctl $line
done <"$filename"
exit 0
path_helper
取得の呼び出しに注意してくださいパス正しく設定してください。最後に、〜/.conf.launchd のそのように見える
setenv PATH ~/Applications:"${PATH}"
setenv TEXINPUTS .:~/Documents/texmf//:
setenv BIBINPUTS .:~/Documents/texmf/bibtex//:
setenv BSTINPUTS .:~/Documents/texmf/bibtex//:
# Locale
setenv LANG en_US.UTF-8
これらはlaunchctl
コマンドです。詳細についてはマニュアルページを参照してください。私の環境では問題なく動作します(私はまだSnow Leopardユーザーですが)。GUIアプリケーションとしては、テクスチュアそしてテックスショップ自分のTexツリーを見ることができます。改善できる点:
シェル スクリプトには が含まれています
#filename="$1"
。これは偶然ではありません。ファイル名は起動エージェントによって引数としてスクリプトに渡されるはずですが、それが機能しません。述べたようにここ(ドイツ語で有料です!)、スクリプトをローンチエージェント自体に配置することが可能です。
このソリューションはユーザーが提供する文字列を使用するため、どの程度安全であるかはわかりません
eval
。この方法を使用した MANPATH の定義はうまく機能しなかったと記憶していると思いますが、確信はありません。
Appleも似たようなアプローチを意図していたことは言及しておくべきだろう。〜/launchd.confですが、この日付とOSでは現時点ではサポートされていません( のマニュアルページを参照してくださいlaunchd.conf
)。この提案では、グロブなどの機能は動作しないと思います。もちろん、これらのファイルは、起動エージェントを除いて、他の場所に置くことができます。起動エージェントは、/ライブラリ/LaunchAgents/または~/ライブラリ/LaunchAgents/。
最後に、Launch Agents に関する情報として使用したソースについて言及しておきます。 1、2、3、4。
アップデート: これは現時点ではバージョン10.8では機能しません。アプリケーションごとの回避策については以下を参照してください。ここそしてここ。
答え3
@floriが提供した回答は、plistファイルを変更した後、ターミナルで次のコマンドを実行すると、Maverickで機能します。
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user
killall Finder
答え4
別のオプションは を使用することです/etc/launchd.conf
。たとえば、PATH
次の行を に追加してデフォルトを変更しました/etc/launchd.conf
:
setenv PATH ~/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/libexec:/usr/texbin
変更を適用するには/etc/launchd.conf
、再起動するか、launchctl < /etc/launchd.conf; sudo launchctl < /etc/launchd.conf
プロセスを実行して終了し、再起動します。
の設定は、/etc/launchd.conf
ルート launchd プロセスとユーザーごとの launchd プロセスの両方に適用されます。 で設定された環境変数は、setenv
との/etc/launchd.conf
両方で表示されます。sudo launchctl export
launchctl export