回答:
次の内容でenvironment.plist
ファイルを作成します~/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>my.startup</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>
launchctl setenv PRODUCTS_PATH /Users/mortimer/Projects/my_products
launchctl setenv ANDROID_NDK_HOME /Applications/android-ndk
launchctl setenv PATH $PATH:/Applications/gradle/bin
</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
ブロックlaunchctl
内に多くのコマンドを追加できます<string></string>
。
plist
システムの再起動後に有効になります。を使用launchctl load ~/Library/LaunchAgents/environment.plist
してすぐに起動することもできます。
[編集]
El Capitanでも同じソリューションが機能します。
Xcode 7.0以降は、デフォルトでは環境変数を評価しません。以前の動作は次のコマンドで有効にできます:
defaults write com.apple.dt.Xcode UseSanitizedBuildSystemEnvironment -bool NO
[編集]
これがうまくいかない状況がいくつかあります。コンピューターを再起動し、「ログイン時にウィンドウを再度開く」を選択すると、再度開いたウィンドウに変数が表示されない場合があります(エージェントが実行される前にウィンドウが開かれている可能性があります)。また、ssh経由でログインした場合、変数は設定されません(そのため、〜/ .bash_profileに変数を設定する必要があります)。最後に、これはEl CapitanとSierraのPATHでは機能しないようです。これは、「launchctl config user path ...」および/ etc / pathsで設定する必要があります。
UseSanitizedBuildSystemEnvironment
)で正確に9回表示されるあいまいな構成設定のようなものはありません。
[ 元の回答 ]:すべてのアプリケーション(ターミナル経由で開始されたものに加えて、DockまたはSpotlight経由で開始launchctl setenv variablename value
されたグラフィックアプリケーション)によって取得されるように変数を設定するために引き続き使用できます。
当然、ログインするたびにこれを行う必要はありません。
[ 編集 ]:これを回避するには、を起動してAppleScript Editor
、次のようなコマンドを入力します。
do shell script "launchctl setenv variablename value"
(複数の変数を設定する場合は、複数行を使用してください)
(⌘
+ s
)をFile format:Applicationとして保存します。最後にSystem Settings
→ ユーザーとグループ → ログイン項目を開き、新しいアプリケーションを追加します。
[ 元の回答 ]:この場所を回避するには、定義するすべての変数を短いシェルスクリプトで定義し、MacOSログインでスクリプトを実行する方法について、以前の回答をご覧ください。これにより、ユーザーがログインしたときにスクリプトが呼び出されます。
[ 編集 ]:変数はその特定のユーザーに対してのみ設定されるため、どちらのソリューションも完璧ではありませんが、必要なのはそれだけでよいのではないかと思っています。
複数のユーザーがいる場合は、ユーザーごとにログイン項目を手動で設定するか、com.user.loginscript.plistのコピーを各ローカルのLibrary / LaunchAgentsディレクトリに配置して、同じシェルスクリプトを指すようにします。
確かに、これらの回避策はどちらも/etc/launchd.confほど便利ではありません。
[ さらに編集 ]:以下のユーザーは、これが彼にとってうまくいかなかったと述べています。しかし、私は複数のヨセミテマシンでテストしましたが、それは私にとってはうまくいきます。問題がある場合は、これを有効にするためにアプリケーションを再起動する必要があることに注意してください。さらに、〜/ .profileまたは〜/ .bash_profileを介して端末で変数を設定すると、シェルから起動されたアプリケーションのlaunchctl setenvを介して設定されたものを上書きします。
Mac OS X 10.10 Yosemiteで3つのファイル+ 2つのコマンドを使用して環境変数を設定することができます。
環境変数の定義を含むメインファイル:
$ ls -la /etc/environment
-r-xr-xr-x 1 root wheel 369 Oct 21 04:42 /etc/environment
$ cat /etc/environment
#!/bin/sh
set -e
syslog -s -l warn "Set environment variables with /etc/environment $(whoami) - start"
launchctl setenv JAVA_HOME /usr/local/jdk1.7
launchctl setenv MAVEN_HOME /opt/local/share/java/maven3
if [ -x /usr/libexec/path_helper ]; then
export PATH=""
eval `/usr/libexec/path_helper -s`
launchctl setenv PATH $PATH
fi
osascript -e 'tell app "Dock" to quit'
syslog -s -l warn "Set environment variables with /etc/environment $(whoami) - complete"
ユーザーアプリケーション(ターミナル、IDEなど)の環境変数をロードするためのサービス定義:
$ ls -la /Library/LaunchAgents/environment.user.plist
-rw------- 1 root wheel 504 Oct 21 04:37 /Library/LaunchAgents/environment.user.plist
$ sudo cat /Library/LaunchAgents/environment.user.plist
<?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>environment.user</string>
<key>ProgramArguments</key>
<array>
<string>/etc/environment</string>
</array>
<key>KeepAlive</key>
<false/>
<key>RunAtLoad</key>
<true/>
<key>WatchPaths</key>
<array>
<string>/etc/environment</string>
</array>
</dict>
</plist>
rootユーザーアプリケーションの同じサービス定義:
$ ls -la /Library/LaunchDaemons/environment.plist
-rw------- 1 root wheel 499 Oct 21 04:38 /Library/LaunchDaemons/environment.plist
$ sudo cat /Library/LaunchDaemons/environment.plist
<?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>environment</string>
<key>ProgramArguments</key>
<array>
<string>/etc/environment</string>
</array>
<key>KeepAlive</key>
<false/>
<key>RunAtLoad</key>
<true/>
<key>WatchPaths</key>
<array>
<string>/etc/environment</string>
</array>
</dict>
</plist>
そして最後に、これらのサービスを登録する必要があります。
$ launchctl load -w /Library/LaunchAgents/environment.user.plist
$ sudo launchctl load -w /Library/LaunchDaemons/environment.plist
私たちが得るもの:
問題/問題:
システムの再起動後にアプリケーションが環境変数を正しく取得するには、次のものが必要です。
これは、ロードされたサービスの明示的な順序付けをAppleが拒否するために発生するため、「再オープンキュー」の処理と並行して環境変数が登録されます。
しかし、実際には、システムを再起動するのは年に数回(大きなアップデートの場合)だけなので、大したことではありません。
launchd
、ブート時に(つまり、ログイン前に)これらのデーモンをロードすることはできませんか?それはあなたが言及するすべての問題を回避するはずです。
から引用
Apple Developer Relations
10-Oct-2014 09:12 PM
多くの検討の後、エンジニアリングはこの機能を削除しました。ファイル
/etc/launchd.conf
はセキュリティ上の理由から意図的に削除されました。回避策として、launchctl limit
起動時に、おそらくからrootとして実行することができますLaunchDaemon
。(...)
解決:
/Library/LaunchDaemons/com.apple.launchd.limit.plist
bash-script を使用してコードを配置します。
#!/bin/bash
echo '<?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>eicar</string>
<key>ProgramArguments</key>
<array>
<string>/bin/launchctl</string>
<string>limit</string>
<string>core</string>
<string>unlimited</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>' | sudo tee /Library/LaunchDaemons/com.apple.launchd.limit.plist
/Library/LaunchDaemons
に入れlaunchctl
、limit
コマンドを実行するように指示する代わりに、引数としてパス文字列とsetenv
コマンドを実行するように指示しPATH
ます。 launchd
起動時に自動的に取得し、ほぼ即座に一種の自己修正されます。
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
古い動作を復元するコマンドは次のとおりです。
# create a script that calls launchctl iterating through /etc/launchd.conf
echo '#!/bin/sh
while read line || [[ -n $line ]] ; do launchctl $line ; done < /etc/launchd.conf;
' > /usr/local/bin/launchd.conf.sh
# make it executable
chmod +x /usr/local/bin/launchd.conf.sh
# launch the script at startup
echo '<?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>launchd.conf</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
<string>/usr/local/bin/launchd.conf.sh</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
' > /Library/LaunchAgents/launchd.conf.plist
今、あなたのようなコマンドを指定することができますsetenv JAVA_HOME /Library/Java/Home
では/etc/launchd.conf
。
El Capitanで確認しました。
私にとって何がうまくいきましたか(aaxの感謝に触発されました):
これを/Library/LaunchDaemons/com.apple.launchd.limit.plistに貼り付け、再起動します。
<?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>eicar</string>
<key>ProgramArguments</key>
<array>
<string>/bin/launchctl</string>
<string>limit</string>
<string>maxfiles</string>
<string>16384</string>
<string>16384</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>ServiceIPC</key>
<false/>
</dict>
</plist>
段階的に必要な場合:
⌘+v
)。これにより、プロセスごとに16384ファイルおよび合計16384ファイルに制限が強制されます。esc
た後:wq
これがお役に立てば幸いです。
https://github.com/ersiner/osx-env-syncを試すことができます。コマンドラインとGUIアプリの両方を単一のソースから処理し、最新バージョンのOS X(Yosemite)で動作します。
最初にbashをソースとする通常のbashスクリプトなので、パス置換やその他のシェルトリックを使用できます。制限なし..(osx-env-syncのドキュメントを確認すると、これがどのように行われるかを理解できます。)
詳細については、ここで同様の質問に回答しました。
解決策は、変数をに追加すること/etc/profile
です。その後、すべてが期待どおりに動作します!もちろん、sudo nano / etc / profileでrootユーザーとして実行する必要があります。他の方法で編集すると、権限をrootに変更した場合でも、システムは/ etc / profileの損傷を訴えます。
以下の方法で〜/ .bash_profileに変数を追加しました。完了したら、再起動/ログアウトしてログインします
export M2_HOME=/Users/robin/softwares/apache-maven-3.2.3
export ANT_HOME=/Users/robin/softwares/apache-ant-1.9.4
launchctl setenv M2_HOME $M2_HOME
launchctl setenv ANT_HOME $ANT_HOME
export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/Users/robin/softwares/apache-maven-3.2.3/bin:/Users/robin/softwares/apache-ant-1.9.4/bin
launchctl setenv PATH $PATH
注:再起動/ログアウトおよびログインせずに、これらの変更を適用できます。
source ~/.bash_profile