PATH
envvarを設定するのに適した場所はどこですか?
~/.profile
または/etc/environment
?
PATH
が両方の場所で設定されている場合はどうなりますか?最終結果は、これらの2つの場所で設定された両方の値の連結ですか?
要約:
コンピューターのすべてのユーザーではなく、現在のユーザーのみのPATH
変数にパス(たとえば/your/additional/path
)を追加する場合は、通常~/.profile
の最後に追加しますこれらの2つの例のいずれかです。
PATH="/your/additional/path:$PATH"
PATH="$PATH:/your/additional/path"
パスの優先順位は左から右に降順であるため、最初のパスの優先順位が最も高いことに注意してください。 $PATH
の左側にパスを追加すると、そのパスの優先度が最も高くなり、その場所の実行可能ファイルが他のすべてをオーバーライドします。右側にパスを追加すると、優先度が最も低くなり、他の場所からの実行可能ファイルが優先されます。
ただし、すべてのユーザーにその環境変数を設定する必要がある場合、/etc/environment
をタッチすることはお勧めしませんが、.sh
で終わるファイル名が/etc/profile.d/
であるファイルを作成することをお勧めします。 /etc/profile
スクリプトと/etc/profile.d
内のすべてのスクリプトは、各ユーザーの個人的な~/.profile
とグローバルに同等であり、初期化中にすべてのシェルによって通常のシェルスクリプトとして実行されます。
詳細:
/etc/environment
はシステム全体の構成ファイルです。つまり、すべてのユーザーが使用します。ただし、root
が所有しているため、管理ユーザーであり、Sudo
を使用して変更する必要があります。
~/.profile
は、ユーザー独自のシェル初期化スクリプトの1つです。すべてのユーザーが1つを持ち、他のユーザーに影響を与えることなくファイルを編集できます。
/etc/profile
および/etc/profile.d/*.sh
は、各ユーザーの~/.profile
と同等のグローバル初期化スクリプトです。ただし、グローバルスクリプトはユーザー固有のスクリプトの前に実行されます。メイン/etc/profile
は、終了直前に*.sh
内のすべての/etc/profile.d/
スクリプトを実行します。
/etc/environment
ファイルには通常、次の行のみが含まれます。
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
システム上のすべてのユーザーのPATH
変数をこのデフォルト値に設定しますが、大きな変更はしないでください。少なくとも/bin
、/sbin
、/usr/bin
、/usr/sbin
などの重要なパスを削除しないでください。
このファイルは、すべてのユーザーのすべてのシェルによって最初の構成ファイルの1つとして読み取られます。シェルスクリプトではないことに注意してください。これは、何らかの方法で解析され、環境変数の割り当てのみを含む可能性のある単なる構成ファイルです!
~/.profile
ファイルには多くのものを含めることができます。デフォルトでは、~/bin
ディレクトリが存在するかどうかをチェックし、これをユーザーの既存のPATH
変数に追加します。 16.04より前のリリース-新しいリリースでは無条件に追加されます):
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
PATH
の古い値はここで再利用され、新しいパスはすべてを上書きするのではなく、先頭にのみ追加されることがわかります。手動で新しいパスを追加する場合は、常に新しい文字列のどこかに古い$PATH
値を保持する必要があります。
この初期化スクリプトは、それが属するユーザーのシェルによってのみ読み取られますが、別の条件があります。
# ~/.profile: executed by the command interpreter for login shells.
# This file is not read by bash(1), if ~/.bash_profile or ~/.bash_login
# exists.
したがって、デフォルトのBashシェルを使用する場合、~/.bash_profile
の変更をユーザーに反映させるには、~/.bash_login
または~/.profile
がないことを確認する必要があります。
環境変数の完全な理解については、以下を参照してください。 https://help.ubuntu.com/community/EnvironmentVariables
/ etc/environment fileはそこでエクスポートを使用できないスクリプトファイルではなく、$ HOMEタイプの変数展開をサポートしていません。simplevariable= valueペアのみです。そのため、そのファイルを使用するには、既存の定義にパスを単に追加する必要があります。これは、特にシステム全体の環境変数設定用です。 1行に1つ。具体的には、このファイルにはシステム全体のロケールとパス設定が保存されます。
〜/ .profile-このファイルは、bashシェルが実行されるたびに実行されます。通常は環境変数に推奨されますが、ログインシェルによってのみ呼び出されるという欠点があるため、有効にするには、ログアウトしてから再度ログインする必要があります-少なくとも、新しいログインシェルを起動します。
環境変数を設定する好ましい場所は、いくつかの事項に依存します:
/etc/environment
です。/etc/environment
になりますが、~/.profile
各ユーザーのホームディレクトリにあるため、システムの各ユーザーに関連しています。システムは/etc/environment
を読み取る前に~/.profile
を読み取ります。いいえ連結は発生せず、のようにアレックスPは最後のassignmentが優先されます。
~/.profile
と/etc/environment
が他のそのような場所でどのようにプレイするかを決定する要因の詳細については、これらの要因がそうであるように here および here に進んでくださいこれらの場所の使用方法に影響を与えます。