ユーザープロセスは/etc/passwd
で書かれているシェルの子プロセスです。
シェルの初期ファイルはパスを修正することがあります。
ログインではシェルの名前は-を前置きします。例えばbashは-bashのよう にして呼ばれます。これはシェル(つまりloginシェル)にシグナルを送ります。 この場合、シェルはlogin初期化ファイルを実行します。そうでなければ ある 初期化が実行されます。
加えてシェルはそれがインタラクティブかどうかチェックします - ファイルや インタラクティブなttyからのコマンドです。これはシェルの初期化を修正して、 その結果インタラクティブではない(non-interactive)non-loginシェルが 初期化されます。bashはここではなんの初期化ファイルも実行しません。
通常のloginシェルとして、bashはシステム広範(system-wide)のファイル
/etc/profile
を使い(sources)ます。このファイルはシステム環境と
パスをbashユーザー用にセットします。しかしシステムがnon-interactiveとして
実施された時はこれは実行されません。もっとも重要なケースは、隣りのマシンで
実行されるリモートコマンドがrshで行われた場合です。/etc/profile
は
実行されずパスはrshデーモンから継承されています。
bashはコマンドライン引数-login
と-i
を受け取ります。この
引数はそれぞれloginシェルあるはインタラクティブ(interactive)シェルとして
シェルをセットするのに使われます。
ユーザーは~/.bash_profile, ~/.bash_login、~/.profile
ファイルを作ることで/etc/profile
でセットされている値を上書きする
ことができます(つまりユーザーの設定)。
これらのファイルのひとつめ(~/.bash_profile
)はcsh初期化の
ロジックと違うことに注意して下さい。~/.bash_login
は
loginシェルに関しては特に何も実行せず、また.bash_profile
があると
きは全く実行されません!
もしbashが"bash"という名前の代わりにshとう名前として使用されて
いると、オリジナルのBourne shell初期化をエミュレートします:その際のファイル
は/etc/profile
、~/.profile
そしてloginシェル用の
ものです。
loginシェルとしてtcshは以下のファイルをこの順に実行します:
/etc/csh.cshrc
/etc/csh.login
~/.tcshrc
~/.cshrc
(もし.tcshrc
が見つからない時)~/.history
~/.login
~/.cshdirs
tcshはcshrcスクリプトの前にloginスクリプトを実行するように組み込めること にも注意して下さい!
インタラクティブでないシェルは*cshrc
スクリプトを実行します。*login
スクリプトはloginで一回だけパスをセットするのに使われます。