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

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

$PATH を echo すると、次のようになります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 変数と異なりますか?

答え1

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

が行うことの 1 つは/etc/profileを実行することです/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

答え2

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

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

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

関連情報