EC2(amazon linux)のetc/environmentとbash_profileって環境変数をまとめるときにおいて、どう違うんでしょうか?
/etc/environment
は PAM の機能で、.bash_profile
は bash の機能です。
前者は、ログインシェルかどうか、対話的シェルかどうか、bash かどうかは関係なく PAM によって読み込まれます。後者は bash スクリプトで bash がログインシェル もしくは 対話的シェルとして実行された場合に bash によって読み込まれ実行されます。
この2つは互換性はありません。/etc/environment
には name=value
形式のものしか書けませんが、.bash_profile
は bash のスクリプトが書けますので name=$name:value
といった書き方が可能ですし、条件分岐や繰り返しといった制御文も書くことができます。その代わり、bash 専用です。
と書いてありますが、ここでいうログイン時ってなんのことなんでしょうか....?
ざっくりいうと、
・Linuxにログインしたときに 実行される bashは ログインシェルとして実行されます。
・上記以外で bash コマンドを実行した場合や、シェルスクリプトでbashが実行された場合は、ログインシェルではありません。
・bash コマンドに -l
--login
オプションを指定した場合はログインシェルとして実行されます。
詳しくは man bash に書いてありますので そちらを見てください。