Mountain Lionでは、新しく起動したすべてのアプリケーションに対して、1つの場所でPATH環境変数をどのように設定するのですか。


9

別の質問について多くの質問があります PATH 環境変数と、シェルによって、スポットライトによって、またはファインダーによって起動されたアプリケーション用にそれを設定する方法(典型的な質問: Finderで起動したアプリケーションにPATHを設定する方法 または PATH環境変数を変更する方法...

回答の範囲は sh 起動スクリプト /etc/paths/etc/launchd.conf。ここで私はの答えの後にいます 統一 の設定 PATH Mac OS X Mountain Lion 10.8.2以降のすべてのアプリケーション用。

回答:


13

さまざまな選択肢を用いた多くの試行の後、私は結論を下します。

ありますか 統一された方法 設定する PATH 異なる方法で起動されたアプリケーション(シェルスクリプト、Finder、Spotlightなど)の場合ええ、はい、そしていいえ:

  • いいえ :設定 PATH シェル起動スクリプト(例: .bashrc )シェルによって起動されたアプリケーションに対してのみ機能します。
  • いいえ :設定 PATH 現在の launchd 経由プロセス launchctl setenv PATH <...> 私には全く働きません。
  • はい :設定 PATH/etc/launchd.conf (そしてシステムを再起動すると)適切になります。 PATH Spotlight、Dock、およびFinderによって起動されたアプリケーション、およびその後の(ローカルの)シェルに表示されます。
  • いいえ :リモートで起動されたシェルは ではない 環境を継承します。 (見る ...なぜssh経由のリモートシェルは環境を継承しないのですか。

シェルの設定に関する注意事項

  1. で正しく機能するために 地元 それは重要です スイッチを切る の用法 /usr/libexec/path_helperデフォルトパスは /etc/paths のパスの順序が変わる可能性があります。 PATH**

  2. 収容する 遠い 再インポートする必要があるシェル launchd シェルへの環境。あなたの中でこのようなものを使ってください .bashrc

# the vexatious path stuff
eval $(launchctl export)

問題全体の不幸な結果は以下のとおりです。

  • ユーザーごとにこれらの統一された設定をする方法はありません。 ( ~/.launchd.conf 動作しません。)
  • ホームディレクトリの拡張などのテクニックを使って異なるソースからPATHを構築する簡単な方法はありません。

更新:を介してパスを設定する /etc/launch.conf する ではない ssh経由でリモートからログインしたシェルで動作します( sshd 親から継承した環境を渡さない launchd 子シェルへ)。 - 私はそれに応じて答えを編集します。
halloleo

リモートシェル用の解決策で更新された回答。
halloleo

1
素晴らしい答えです。以下のように、launchd環境の調達を単純化することができます。 eval "$(launchctl export)"
mklement0

編集する簡単な方法 /etc/launchd.conf 走るだけです sudo -e /etc/launchd.conf (あなたがviに精通している場合)または EDITOR=nano sudo -e /etc/launchd.conf (あなたがノンモーダルエディタを好む場合)。
nohillside

3

拡大中 前の答え パスを変更する /etc/launchd.confあなたは次のことをする必要があるでしょう。

  1. 管理者権限があることを確認してください。

  2. 必要に応じて変更された、次の内容の新しいテキストファイルを作成します。

    setenv PATH /usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/Users/YourUserName/bin
    
  3. それを保存 ホームディレクトリに として launchd.conf

  4. Terminal.app(またはあなたのお気に入りのもの)を開き、次のように入力してください。

    sudo mv ~/launchd.conf /etc

    あなたの以前の使い方に応じて sudo コマンド、あなたは短い "あなたがやっていることをやって注意してください"というメッセージが表示される場合がありますが、どちらの方法でもあなたのパスワードを入力する必要があります。コマンドが実行するのは、ファイルを /etc たとえば、ディレクトリをTextEditに保存するときに直接アクセスすることはできません。 sudo そのディレクトリに書き込むには管理者権限が必要なので、( "Super User DO"の略)を使用します。

  5. コンピュータを再起動してください。

そして、あなたはすべての準備ができているはずです。がんばろう!


詳細をありがとう、しかし質問は ではない 変更方法について launchd.confしかし、むしろすべてのアプリケーションが統一された方法で同じPATH変数を取得する方法についてです。
halloleo

そうです、私はもともとどのように設定するのかを考え出そうとする質問を探しました。 PATH 私のGUIアプリのために、そして私はどの貧しい人々がどのように変更に影響を与えるべきか知らないかもしれないのを手伝うだろうと考えました...
MattDMo

ここに有効なポイントがあります。それでも、私は思います 統合する 答えのあなたの情報はよりよい選択です。 - このコメントスレッドはメタディスカッションになると思いますので、meta.stackoverflowで次のように開きました。 追加の回答をどうするか...
halloleo

1
実際には、これはmeta.apple.stackexchange.comにあるべきではありませんか?
MattDMo

実際、meta.apple.stackexchange.comが正しい場所でした。私はそれが存在することを知りませんでした...
halloleo

-2

あなたが与えることがあります https://github.com/ersiner/osx-env-sync 試してみてください。

取り扱い コマンドラインとGUIの両方のアプリ から シングルソース 。そしてそれは OS Xの最新バージョン (ヨセミテ)


これは、彼が言うビットを使って他の答えを自動化するだけではうまくいきません。 launchctl setenvパス&lt; ...&gt;
Mark

@マークこれは、ここで答えを自動化するステップとは関係ありません。これはLaunch Agentを使います。試してみることをお勧めします。
Ersin Er

承認された解決策は launchd システムも。あなたの解決策は、受け入れられた答えで述べられているのと同じ問題を抱えています。
halloleo

@halloleo実際に試したことがありますか?そしてOS Xのどのバージョンで?
Ersin Er
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.