OS XでグローバルPATH環境変数を設定するにはどうすればよいですか?


101

すべてのユーザーシェルとGUIアプリケーションが同じPATH環境を取得できるように、OS XのグローバルPATH環境変数に追加したいと思います。

シェルスタートアップスクリプトのパスに追加できることは知っていますが、これらの設定はGUIアプリケーションに継承されません。

これまでに見つけた唯一の方法は、/etc / launchd.confの PATH環境変数を再定義することです

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/my/path

で実際にPATHに追加する方法がわかりませんでしたlaunchd.conf

私はこの方法について少し心配していますが、これまでのところこれが機能する唯一のものです。もっと良い方法はありますか?



2
ヨセミテ以降については、stackoverflow.com
questions / 25385934 /…を

ここでの回答はいずれもOPの質問に対応していません。しかし、thSoftによるこのコメントは、金銭的な権利です!:多分これは、マージまたはその参照先の質問にリンクされている必要がありstackoverflow.com/questions/25385934/...
ケビン・ブックス

回答:


71

パーマーのGUI情報は正しいですが、シェルが表示するパスを変更するより保守可能な方法があります。同様mediaslaveが言った、あなたは編集することができ/etc/paths、より良いあなたがテキストファイルドロップすることができますが、/etc/paths.d/それはそれでパスを持っており、すべてのシェルが正確にパスを構築します。

たとえば、私のシステムでは:

$ cat /etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
$ ls /etc/paths.d
X11       git      postgres
$ cat /etc/paths.d/postgres
/Library/PostgreSQL/8.4/bin
$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/Library/PostgreSQL/8.4/bin:/usr/X11/bin:/usr/local/mysql/bin

1
よかった、ありがとう!注:これを実行するには、ログアウトしてからログインし直す必要があります。
-weronika

@weronika:終了して再起動するだけで十分であることがわかりましたX11(完全にログアウトするよりも苦痛は少ない)。私はそれを試しませんでしたTerminal
ピーター

私はターミナルについて言及していました-あなたは正しい、私は指定するのを忘れていました。
ウェロニカ

8
これは知っておくと便利ですが、このメカニズムはGUIアプリには適用されないという点でOPの質問には答えません。OPは、デフォルトに追加できる統合ソリューションを探していました。$PATH
mklement

ここで「私のシステム」とはどういう意味ですか、@ cogg?ここでは、すべてOS Xを使用していませんか?申し訳ありませんが、私はまだOS Xが
初めてです。OSX

48

/etc/launchd.conf

このlaunchd.confファイルは** OS X v10.8(Mountain Lion)およびv10.9(Mavericks)のコマンドラインとGUIアプリケーションの両方で機能する唯一の完全なソリューションであり、すべてのユーザーがGUIおよびコンソールアプリケーションで機能します。 。

sudo touch /etc/launchd.conf
sudo nano /etc/launchd.conf

追加

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

上記の例では/usr/local/bin、PATHのデフォルトの環境値に追加しました。

このファイルはスクリプトではなく、置換を使用するオプションがないことに注意してください。また、これらを適用するには、再起動する必要があります。

他のすべては部分的な解決策にすぎないことを忘れないでください:

  • environment.plist Spotlight経由で起動されたアプリケーションでは機能しません。
  • /etc/paths -コンソールのみ
  • /etc/csh.cshrcまたは/etc/bashrc-一部のシェルのみ

この回答は、Mac OS Xでの環境変数の設定からの同じ質問に基づいています


7
素晴らしい発見ですが、この質問はすでにlaunchdについて語っており、その中のパスに追加する方法を尋ねています。
クレゴックス

21
「本当の答え」として自分自身を指している元の質問に本当にコメントを追加しましたか?
TJルオー

7
それはあなたの-役に立つ-答えによって暗示されていますが、それを綴るだけです:で他の環境変数を参照することができないため、デフォルトのパスに追加するOPの要望はサポートされていません/etc/launchd.conf
mklement

グローバルではありません。/etc/profileがpath_helperを呼び出し、/ etc / pathsと/etc/paths.d/からPATHを再構築すると、コマンドライン環境はこれを破棄します
Dave X

1
apple.stackexchange.com/questions/106355/…によると、これはヨセミテ以降では機能しなくなりました
ericn

7

シェルごとに設定する必要があります。Bashとcshのようなシェルは、PATHを調整するための同じ構成ファイルと構文を共有しません。

launchctl環境変数はログイン時に設定されるため、これを実行しようとしても機能しません。Unixのシェルセッション以外のシステム全体には存在しません。

だからあなたは追加したいと思うだろう

setenv PATH "$PATH:/add/my/extra/path"

/etc/csh.cshrc

export PATH="$PATH:/more/paths:/

/etc/bashrc

GUIアプリケーションで環境変数が必要な場合は、より複雑です。.MacOSX/environment.plist各ユーザーのホームディレクトリにファイルを作成する必要があります。.MacOSXディレクトリには、おそらくデフォルトでは存在しないので、あなたはそれを作成する必要があります。

ファイルの形式は次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>

    <key>PRINTER</key>
    <string>myprinter</string>

    <key>PATH</key>
    <string>/path/to/thing/I/need</string>

    <key>DISPLAY</key>
    <string>0:1</string>

</dict>
</plist>

詳細environment.plist はAppleのサイトにあります。


ただし、/ etc / launchd.confで設定すると設定が有効になります...うーん... / meが混乱します。
クセルクセス

本当に?そこでどの環境変数を設定していますか?
パーマー

1
OS X 10.8時点での更新:この~/.MacOSX/environment.plistアプローチはサポートされなくなり、ユーザーレベルでの代替はありません。システム全体で使用できます/etc/launchd.conf(* .appごとのソリューションがあります)。
mklement

OPの質問には答えません。
ケビンブックス

3

に行を追加して、グローバルパスを編集できます/etc/paths

sudo nano /etc/paths そこに着くはずです。


2
これは知っておくと便利ですが、このメカニズムはGUIアプリには適用されないという点でOPの質問には答えません。
mklement


1

誰が最もシンプルエレガントな方法をカバーしいるかどうかはわかりません。少なくともMac OS X v10.6(Snow Leopard)では

いじり[/etc/|~/.][profile|bashrc]ファイルが動作するかもしれないが、それはややハックのです。/etc/paths.d/ディレクトリが移動するための方法であります:

  • お好みのエディターを使用してください。
  • 行ごとにパスを指定*name*/etc/paths.d/て、名前の付いた新しいファイルを作成します(既にそこにある名前は付けないでください)。

    /usr/X11/bin
    /Developer/usr/bin
    
  • それから加えて

    eval '/usr/libexec/path_helper -s`
    

    profilebashrc、そしてあなたが行くために良いことがあります。


1
これは知っておくと便利ですが、このメカニズムはGUIアプリには適用されないという点でOPの質問には答えません。
mklement

ファイル名は文字通り*name*ですか?それともただのことnameですか?
ピーターモーテンセン

0

launchdがこれを受け入れるかどうかはわかりませんが、試してください:

setenv PATH "$ PATH:/ my / path"

1
残念ながらそれは機能しません。launchctlが環境変数に簡単にアクセスできるようには見えません。環境変数を取得するコマンドはありますが、その使用方法に関するドキュメントはまったくありません。
ラジョス09年

0

なぜあなたがこれとは/etc/launchd.conf対照的に使用するのかわからない/etc/profile-しかし、私はMac OS Xの専門家ではない-私はそれが機能すると確信していると信じているlaunchdが、Mac OS Xの実装/交換ですinit-Mac OS Xは私を混乱させます。

とにかく、setenv PATH "$PATH:/more/paths:/and/more/paths"動作します(tcsh)、およびbournシェルの同等物はexport PATH="$PATH:/more/paths:/and/more/paths"- launchd特定のシェルにどのように関連するのかわかりません。

私が答えたよりも多くの質問をしたと思う=)


4
/ etc / profileパス設定は、どのOS X GUIアプリでも表示されません。これはbashにのみ適用されます。すべてのアプリケーションが新しいパス設定を取得するようにします。
ラジョス09年

1
Unix?もちろん、Unixです。つまり、ちょっと。うん、私たちは30年間働いていたものを壊しましたが、それはまだUnixです!/ため息
マットシモンズ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.