web-dev-qa-db-ja.com

UbuntuのPATH変数はどこに設定されていますか?

これは、Linux用のコマンドラインアプリケーションツールを作成しているときに偶然出会った非常に興味深い質問です。残念ながら、SOの回答は他の質問に対する無数の回答の中に隠されているため、PATHを変更したい人のために、SOについて別の質問をすることにしました。プログラム的に。

8
John Strood

GrzegorzŻurの回答 別の質問に対しては、それを見事に捉えています。残念ながら、それは他の多くの答えの中に隠されていました。

それを行うには複数の方法があります。実際の解決策は目的によって異なります。

変数値は通常、割り当てのリスト、またはシステムまたはユーザーセッションの開始時に実行されるシェルスクリプトに格納されます。シェルスクリプトの場合、特定のシェル構文を使用する必要があります。

システム全体

  1. /etc/environment一意の割り当てのリスト。 /usr/local/something/binなどのシステム全体のディレクトリをPATH変数に追加したり、Java_HOMEを定義したりするのに最適です。
  2. /etc/xprofile X Window Systemセッションの開始中にシェルスクリプトが実行されました。これは、X Window Systemにログインするすべてのユーザーに対して実行されます。 /usr/local/something/binのようなすべてのユーザーに有効なPATHエントリに適しています。ファイルは他のスクリプトに含まれているため、ユーザーシェルの構文ではなく、POSIXシェル構文を使用します。
  3. /etc/profileおよび/etc/profile.d/*シェルスクリプト。これは、シェルのみのシステムに適しています。これらのファイルはシェルによってのみ読み取られます。
  4. /etc/<Shell>.<Shell>rc。シェルスクリプト。これは単一のシェル固有であるため、不適切な選択です。

また、/etc/environmentはスクリプトファイルではなく、1行に1つずつ割り当て式で構成されています。このファイルにはシステム全体のロケールとパスの設定が格納されているため、ほとんどの場合引用された選択です。 /etc/profileの使用は推奨されません。 /etc/bash.bashrcをポイントし、/etc/profile.dからエントリを収集するためだけに存在します

ユーザーセッション

  1. ~/.pam_environment。一意の割り当てのリスト。すべてのユーザーセッションの開始時に [〜#〜] pam [〜#〜] によって読み込まれ、X Window Systemセッションまたはシェルであるかどうかは関係ありません。 HOMEまたはPATHを含む他の変数を参照することはできないため、使用は制限されています。
  2. ~/.xprofileシェルスクリプト。これは、ユーザーがX Window Systemシステムにログインしたときに実行されます。ここで定義された変数は、すべてのXアプリケーションに表示されます。 PATH~/bin~/go/binなどの値で拡張したり、ユーザー固有のGOPATHまたはNPM_HOMEを定義したりするのに最適です。ファイルは他のスクリプトに含まれているため、ユーザーシェルの構文ではなく、POSIXシェル構文を使用します。グラフィカルテキストエディタまたはIDEショートカットで起動すると、これらの値が表示されます。
  3. ~/.profileシェルスクリプト。これは、ターミナルまたはターミナルエミュレータから起動したプログラムでのみ表示されます。シェルのみのシステムに適しています。
  4. ~/.<Shell>rc。シェルスクリプト。これは単一のシェル固有であるため、不適切な選択です。
23
John Strood

一時的な変更の場合:

~$ export PATH=$PATH:~/root/scripts

永続的な変更のために、この行を/etc/environmentファイルに次のように追加できます。

PATH=$PATH:~/root/scripts
4