Ubuntu 11.04の仮想マシンがあり、Java開発環境をセットアップしたかった。私は次のようにしました
Sudo apt-get install openjdk-6-jdk
次のエントリを〜/ .bash_profileに追加しました
export Java_HOME=/usr/lib/jvm/Java-6-openjdk
export PATH=$PATH:$Java_HOME/bin
変更を保存して終了
ターミナルを再度開き、次を入力します
echo $Java_HOME (blank)
echo $PATH (displayed, but not the Java_HOME value)
Java_HOMEのエクスポートとPATHへの追加が行われなかった場合など、何も起こりませんでした。
〜/ .bashrcに移動し、次のエントリをファイルの最後に追加する必要がありました
#Source bash_profile to set Java_HOME and add it to the PATH because for some reason is not being picked up
. ~/.bash_profile
~/.bash_profile
は、対話型ログインモードで起動した場合にのみbashから取得されます。これは通常、コンソールでログインするときのみです(Ctrl+Alt+F1..F6)、またはsshを介して接続します。
グラフィカルにログインすると、~/.profile
は、gnome-session(または使用しているデスクトップ環境)を起動するスクリプトによって具体的に取得されます。したがって、グラフィカルにログインしたときに、~/.bash_profile
はまったくソースされません。
ターミナルを開くと、ターミナルは(非ログイン)インタラクティブモードでbashを開始します。つまり、~/.bashrc
をソースします。
これらの環境変数を配置する適切な場所は~/.profile
であり、次回ログインしたときに効果が明らかになります。
~/.bash_profile
から~/.bashrc
を調達するのは間違った解決策です。それは逆になるはずです。 ~/.bash_profile
は~/.bashrc
をソースする必要があります。
DotFiles を参照して、そのような理由の歴史を含む、より詳細な説明を確認してください。
(補足として、aptを介してopenjdkをインストールする場合、シンボリックリンクはパッケージで設定する必要があります。したがって、Java_HOME
を設定したり、PATH
を変更したりする必要はありません。
Bashシェルがログインシェルとして起動されているかどうかを確認するには、次を実行します。
shopt login_Shell
返信がoff
の場合、ログインシェルを実行していません。
Bashマニュアルのinvocationセクションを読んで、Bashがさまざまな構成ファイルを読み取る(または読み取らない)方法を確認してください。
man bash
からの抜粋:
Bashが対話型ログインシェルとして、または
--login
オプション付きの非対話型シェルとして呼び出されると、bashはまず、ファイル/etc/profile
からコマンドを読み取り、実行します(そのファイルが存在する場合)。そのファイルを読み取った後、~/.bash_profile
、~/.bash_login
、および~/.profile
をこの順序で探し、存在し、読み取り可能な最初のコマンドからコマンドを読み取り、実行します。
一方、su
はデフォルトではログインシェルを起動しません。--login
オプションを使用して、ログインシェルを起動するように指示する必要があります。
プロファイル設定を編集することにより、ログインシェル(つまりbash -l)を使用するようにgnome-terminalのデフォルトを変更できることに言及する価値があると思います。
[編集]-> [プロファイル設定]-> [タイトルとコマンド]タブに移動して、[コマンドをログインシェルとして実行]オプションをチェックします。
ターミナルを開くかsu
を実行すると、シェルはログインシェルとしてではなく、通常のインタラクティブシェルとして実行されます。したがって、~/.bashrc
は読み取りますが、~/.bash_profile
は読み取りません。 -l
オプションを指定してsu
を実行すると、シェルをログインシェルとして実行できます。
GUIで作業しているとき、シェルは通常ログインシェルとして実行されることはないので、通常はすべてのyoutを~/.bashrc
に入れても問題ありません。
TL; DR
古典的な推奨Ubuntu設定では、~/.bash_profile
は特定の場合にのみ評価されます。そして、それは理にかなっています。
自分のものを~/.bashrc
に入れると、毎回評価されます。
OK、理解したい、なぜこれが理にかなっているのか?
何が起こっているかを理解するためのキーポイント:
したがって、「ログイン」時間は通常次のとおりです。
ssh
を介してログインすると、シェルがすべてのプロセスの親になるため、~/.bash_profile
がロードされます。gnome-session
クラシックubuntuの場合)が読み取りを担当します.profile
。OK、だから私のものを置く場所?
詳細はこちら という、かなり複雑なものです。しかし、ここでは、ubuntuユーザーにとって非常に一般的なランダウンがあります。それを考慮して:
bash
Shellを使用します。~/.bash_profile
があり、推奨に従って~/.bashrc
に~/.bash_profile
の読み込みを追加して、少なくとも取得する1つのファイル呼び出しメカニズムとは何でも評価された。これは、物を置く場所の簡単な提案です。
〜/ .bashrc(推奨事項に従う場合は、すべての機会で評価を取得)
fast-evaluation環境変数とser-onlyおよびbash-onlyのコードの場合(エイリアスなど)。 bashismは大歓迎です。
それは次のときにロードされます:
bash
の呼び出しscreen
新しいペインまたはタブ。 (tmux
ではありません!)terminator
/gnome-terminal
...).また、以前の推奨事項のおかげで、他のすべての機会にロードされます。
〜/ .bash_profile(取得特定の状況でのみ評価)
slow-evaluation環境変数とser-onlyおよびconsole-sessionプロセスのコード。 bashismは大歓迎です。ロードされます:
tmux
新しいペインまたはウィンドウ(デフォルト設定)、(screen
ではありません!)bash -l
の明示的な呼び出し、terminator
/gnome-terminal
...)if ifオプション「コマンドをログインシェルとして実行」にチェックを付けます。〜/ .profile(グラフィカルセッションでのみ評価されます)
slow-evaluation環境変数およびno-bashismの場合ser-onlyおよびすべてのgraphical-sessionプロセス。ログイン時にグラフィカルUIにロードされます。