〜/ .MacOSX / environment.plistまたはLogin Hooks(これらは非推奨であるため)を使用せずにGUIアプリケーションで使用できるように、Mac OS Xで環境変数を設定するにはどうすればよいですか?
〜/ .MacOSX / environment.plistまたはLogin Hooks(これらは非推奨であるため)を使用せずにGUIアプリケーションで使用できるように、Mac OS Xで環境変数を設定するにはどうすればよいですか?
回答:
マウンテンライオンのすべて/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:もちろん、特定のパスのニーズに合わせてパスエントリを調整する必要があります。
このソリューションでは、の機能を起動エージェントとlaunchctl
組み合わせて、古いログインフックを模倣します。のストアを使用する他のソリューションについては、この比較を参照してください。ここで使用される起動エージェントは/ Library / LaunchAgents /にあります。launchd
<?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>
1つの重要なことはRunAtLoadキーです。これにより、可能な限り早い時間に起動エージェントが実行されます。実際の作業は、シェルスクリプト/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を正しく設定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の男だと言う必要があります)。texstudioやTeXShopなどのGUIアプリケーションは、自分のtexツリーを見ることができます。改善できるもの:
シェルスクリプトを持っている#filename="$1"
ことに。これは偶然ではありません。ファイル名は、起動エージェントによって引数としてスクリプトに入力される必要がありますが、機能しません。
ここで述べたように(ドイツ語およびペイウォールの背後に!)、起動エージェント自体にスクリプトを配置することができます。
eval
ユーザー提供の文字列を使用するため、このソリューションがどれほど安全かはわかりません。
この方法を使用したMANPATHの定義はうまく機能しなかったことを覚えていると思いますが、よくわかりません。
Appleは、〜/ launchd.confに何かを置くことでやや似たアプローチを意図したことを言及する必要がありますが、現在この日付とOSについてはサポートされていません(のマンページを参照launchd.conf
)。グロビングのようなものは、この提案のようには機能しないと思います。そしてもちろん、これらのファイルは、/ Library / LaunchAgents /または〜/ Library / LaunchAgents /に存在する必要がある起動エージェントを除いて、他の場所に置くことができます。
export PATH=.:"$(launchctl getenv PATH)"
、〜/ .bash_profile(他のシェルでも同様)で記述することをお勧めします。これはpath_helper
シェルスクリプトで呼び出されるため可能です。OS XのPATH変数の詳細については、この回答を確認してください。
@floriが提供する答えは、plistファイルを変更した後にTerminalで次のコマンドを実行すると、Maverickで機能します。
/System/Library/Frameworks/CoreServices.framework/Frameworks/LaunchServices.framework/Support/lsregister -kill -r -domain local -domain system -domain user
killall Finder
@ percival-ulyssesが提供する答えは、10.9 Mavericksで次の小さな変更を加えて動作します:/Users/Shared/conflaunchd.shスクリプトを直前に編集しexit 0
て行を追加します
killall Dock
killall SystemUIServer
Dockとメニューバーを再起動します。この後、DockまたはSpotlightから起動されたアプリケーションは正しいPATHを継承します。Finderを使用してPATHクリティカルなアプリケーションを起動するkillall Finder
場合は、追加することもできます。
で.bash_profile
私はラインを使用します
export PATH=`launchctl getenv PATH`
ターミナルのPATHを設定するには、この方法でPATHを同じ場所である〜/ .conf.launchdファイルから制御します。
別のオプションはを使用すること/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
inで設定された環境変数/etc/launchd.conf
は、sudo launchctl export
との両方で表示されlaunchctl export
ます。