回答:
従来、UNIXシステムでユーザーごとの環境変数を定義する場所は~/.profile
です。ログインシェルがBourne互換シェルである場合、このファイルはログインシェル(つまり、ログイン時に開始され、コマンドを入力できるプログラム)によって読み取られます。
BashはBourne互換のシェルです。ログインシェルとして呼び出されると、~/.bash_profile
このファイルが存在する場合と存在しない~/.profile
場合の両方を読み取ります~/.bash_profile
。
経験則として、パスワードをテキストモードで(たとえば、テキストコンソールで、またはsshを使用してリモートで)入力すると、取得されるシェルはログインシェルになります。
ただし、グラフィカルプログラムにパスワードを入力してグラフィカル環境にログインすると、通常のログインシェルがバイパスされます。.profile
この場合に読み込まれるかどうかは、グラフィカルセッションの設定方法によって異なります。たとえば、Linuxディストリビューション間、ディスプレイマネージャー間、デスクトップ環境間で異なります。チェーン内のプログラムの1つが明示的にログインシェルを呼び出す場合があります。プログラムの1つが明示的に読み取る場合があります~/.profile
。そして時々これのどれも~/.profile
起こらず、読まれない。
可変性の例を示すために、Ubuntu 10.04では、関係するスクリプトをざっと一目で確認できる限り、kdmまたはlxdmでログインした~/.bash_profile
場合、存在する場合はそれが読み取られ、それ~/.profile
以外の場合は読み取られます。gdmでログインした場合~/.profile
は、読み取りのみです。xdmでログインした場合、~/.profile
は読み取られません。
私が知っているすべてのシステムは、ユーザーごとの環境変数を設定するいくつかの方法を提供しています。残念ながら、一般的な答えはありません。
で環境変数を設定するか~/.bashrc
、GUI環境の各端末でログインシェルを起動する推奨事項が表示される場合があることに注意してください。どちらも悪い考えです。理由の1つは、経験した問題です。つまり、環境変数は、ターミナルから起動したプログラムでのみ利用でき、アイコン、メニュー、またはキーボードショートカットで直接起動したプログラムでは利用できませんでした。
.profile
は、ログイン時に読み取られます。環境変数を入力.bashrc
しても機能せず、シナリオは次のことを示しています。このシェルを実行する(おそらくGUI)アプリケーションには環境変数が必要ですが、環境変数をで定義すると.bashrc
、 t。
決定的な答えは、Bashスタートアップファイルの bashマニュアルページセクションにあります。「ログインシェルではないインタラクティブシェルが起動すると、Bashは〜/ .bashrcからコマンドを読み取って実行します(そのファイルが存在する場合)。」
他の質問への回答は、eshellが実際には実行されないことを指摘していますbash
。Emacs eshell
はそうではありませんbash
。仮定するとeshell
考え負荷が.bashrc
仮定として故障しているzsh
かcsh
ロードします.bashrc
。それは別のシェルです。
2つのオプションが表示されます。
bash
とのelispコードを生成する独自のスクリプトを作成しますeshell
。重複なしでパスにディレクトリを追加することに関する議論にも興味があるかもしれません。