web-dev-qa-db-ja.com

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

$ 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変数とは異なりますか?

10
level0

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

/etc/profileが実行することの1つは、/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」が最後に追加されます。それらが何を追加しているかを正確に知りたい場合は、起動スクリプトを確認する必要があります。

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

14
Gordon Davisson

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

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

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

0
rovr138