〜/ .MacOSX/environment.plist またはログインフック(これらは 非推奨 であるため)?
このソリューションは、launchctl
の機能をLaunch Agentと組み合わせて使用して、古いログインフックを模倣します。 launchd
のストアを使用する他のソリューションについては、 この比較 を参照してください。ここで使用される起動エージェントは/ Library/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>
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"
が含まれています。起動エージェントが引数としてファイル名をスクリプトに渡す必要があるため、これは偶然ではありませんが、これは機能しません。
前述のように here (ドイツ語で、ペイウォールの背後にあります!)、起動エージェント自体にスクリプトを配置することが可能です。
ユーザーが指定した文字列でeval
を使用するため、このソリューションがどれほど安全かはわかりません。
この方法を使用したMANPATHの定義がうまく機能しなかったことを覚えていると思いますが、よくわかりません。
Appleは、〜/ launchd.confにデータを入れることで、多少似たアプローチを意図していたが、現在これについてはサポートされていないことに注意してください日付とOS(launchd.conf
のマンページを参照)。この提案のようにグロビングなどは機能しないと思います。もちろん、これらのファイルは、起動エージェント以外の場所に配置できます。 / Library/LaunchAgents /または〜/ Library/LaunchAgents /。
最後に、Launch Agentsの情報として使用したソースに言及する必要があります: 1 、 2 、、 4 。
Update:これは現在、バージョン10.8では機能しません。アプリケーションごとの回避策は here および here で説明されています。
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>
(参照: LaunchServicesKeys Documentation at Apple )
アプリ(私の場合はSourceTree)は指定されたパスを使用し、git 1.9.3で動作します:-)
PS:もちろん、特定のパスのニーズに合わせてパスエントリを調整する必要があります。
Plistファイルを変更した後、ターミナルで次のコマンドを実行した場合、@ floriによって提供された回答が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で私に次の小さな変更を加えることで機能します。edit / 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
を使用することです。たとえば、次の行を/etc/launchd.conf
に追加して、デフォルトのPATH
を変更しました。
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プロセスの両方に適用されます。 /etc/launchd.conf
のsetenv
で設定された環境変数は、Sudo launchctl export
とlaunchctl export
の両方で表示されます。