「echo $ PATH」と/ etc / pathsの違いは何ですか?


10

$ PATHをエコーすると、次のようになりUsers/myusername/.node_modules_global/bin:/Users/mac/.node_modules_global/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Users/mac/Library/Android/sdk/platform-tools:/platform-toolsます。

これからいくつかのパスを削除したいのですが、コマンドを使用してファイルを開くとvim /etc/paths、次の結果が得られます。

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

/ etc / pathsファイルは$ PATH変数とは異なりますか?


OS Xのバージョンは?私は私のものではありませんが/etc/paths、私は走っ10.4.11ていて、それ以来おそらく状況は変わっています
Fox

1
しかしAskDifferentの回答によると/etc/pathsはデフォルトを生成するために使用され、$PATH後で変更できます
Fox

これがデフォルトです。ユーザーが自分の殻を開始時点で、しかし、それは同様に、ソースシェル他のファイルによって修正されるだろう~/.bashrc~/.profile
Sergiy Kolodyazhnyy

回答:


14

/etc/paths$PATHシェルプロセスのセットアップに使用されるものの一部です。新しいターミナルウィンドウを開くと、が起動しbash、いくつかの起動スクリプトが実行されます:/etc/profileAND ~/.bash_profileOR(存在しない場合)~/.bash_loginOR(存在しない場合)~/.profile。これらのスクリプトは、を含むシェル環境をセットアップし$PATHます。

実行する処理の1つ/etc/profileはrunです/usr/libexec/path_helper。これは、内の/etc/pathsすべてのファイルを読み取り、/etc/paths.dその内容をに追加し$PATHます。しかし、これは単なる出発点です。独自の起動スクリプト(存在する場合)は、への追加$PATH、編集、完全な置換などを行うことができます。

起動スクリプト(および/またはスクリプトの実行内容)が取得する基本セットにいくつかのエントリを追加しているように見えます/etc/paths。「Users / myusername / .node_modules_global / bin:/Users/mac/.node_modules_global/bin:」が$PATH(これらのディレクトリが最初に検索されることを意味する)の先頭に追加され、「:/ Users / mac / Library / Android / sdk / platform-tools:/ platform-tools」が最後に追加されます。それらが何を追加しているかを正確に知りたい場合は、起動スクリプトを確認する必要があります。

ところで、この設定プロセスは$PATHbashの「ログイン」シェルにのみ適用されます。bashシェルによって実行されるものはすべて$PATHそれから継承するので、おそらく本質的に同じものを持っています。bashの非ログインシェルは、やや異なるセットアッププロセスに従います。他のシェル、およびシェルから開始されていないもの(たとえば、cronジョブ)は、完全に異なる場合があります$PATHs


非ログインシェルの場合(たとえば/usr/local/bin/bash、によってインストールされbrew-l引数なしで)/usr/libexec/path_helperは使用され/usr/local/binず、デフォルトではに含まれていないことに注意してください$PATHpath_helperスクリプトまたは対話式で使用するには、コマンドはeval $(/usr/libexec/path_helper)です。
カイルストランド

0

変更を確認するために最初に確認する場所は、

~/.profile
~/.bashrc
~/.bash_profile

Bash以外のものを使用している場合は、構成ファイルをチェックして、PATHに関する記述がないか確認してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.