OS X で GUI アプリケーション用の環境変数を設定する

OS X で GUI アプリケーション用の環境変数を設定する

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ツリーを見ることができます。改善できる点:

  1. シェル スクリプトには が含まれています#filename="$1"。これは偶然ではありません。ファイル名は起動エージェントによって引数としてスクリプトに渡されるはずですが、それが機能しません。

  2. 述べたようにここ(ドイツ語で有料です!)、スクリプトをローンチエージェント自体に配置することが可能です。

  3. このソリューションはユーザーが提供する文字列を使用するため、どの程度安全であるかはわかりませんeval

  4. この方法を使用した MANPATH の定義はうまく機能しなかったと記憶していると思いますが、確信はありません。

Appleも似たようなアプローチを意図していたことは言及しておくべきだろう。〜/launchd.confですが、この日付とOSでは現時点ではサポートされていません( のマニュアルページを参照してくださいlaunchd.conf)。この提案では、グロブなどの機能は動作しないと思います。もちろん、これらのファイルは、起動エージェントを除いて、他の場所に置くことができます。起動エージェントは、/ライブラリ/LaunchAgents/または~/ライブラリ/LaunchAgents/

最後に、Launch Agents に関する情報として使用したソースについて言及しておきます。 1234

アップデート: これは現時点ではバージョン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 exportlaunchctl export

関連情報