私は何年もの間、さまざまな* nixベースのシステムを使用してきましたが、使用するBashのすべての種類に、実行する起動スクリプトを決定するためのアルゴリズムが異なるようです。環境変数やエイリアスの設定、起動メッセージ(MOTDなど)の印刷などのタスクのためには、どの起動スクリプトが適していますか?
.bashrc
、.bash_profile
、および.environment
にものを入れることの違いは何ですか? .login
、.bash_login
、.profile
などの他のファイルも見ました。これらは関係ありますか?物理的にログインしたとき、sshを介してリモートにログインしたとき、新しい端末ウィンドウを開いたときに実行される違いは何ですか?プラットフォーム間(Mac OS X(およびそのTerminal.app)とCygwin Bashを含む)で大きな違いはありますか?
Shell設定ファイルとの主な違いは、いくつかは "login"シェルによってのみ読み込まれるということです(例えば、あなたが他のホストからログインするとき、またはローカルのunixマシンのテキストコンソールでログインするとき)。これらは.login
、.profile
または.zlogin
と呼ばれるものです(使用しているシェルによって異なります)。
それからあなたは "対話型"シェルによって読み込まれる設定ファイルを持っています(ターミナルに接続されているもの(あるいはウィンドウシステムの下で走っているターミナルエミュレータの場合には疑似ターミナル)のように)。 .bashrc
、.tcshrc
、.zshrc
など.
bash
は.bashrc
がの両方が interactive および non-login であるという点で、これを複雑にしています。自分の.bash_profile
に、.bashrc
も次のように読むように指示する
[[ -r ~/.bashrc ]] && . ~/.bashrc
他のシェルは異なった振る舞いをします - 例えばzsh
の場合、ログインシェルであろうとなかろうと.zshrc
は常にインタラクティブなシェルのために読み込まれます。
Bashのマニュアルページは、各ファイルが読み込まれる状況を説明しています。はい、動作は通常マシン間で一貫しています。
.profile
は、元々/bin/sh
によって使用されていたログインスクリプトのファイル名です。 bash
は、一般的に/bin/sh
と後方互換性があり、存在する場合は.profile
を読み取ります。
それは簡単です。それはman bash
で説明されています:
/bin/bash
The bash executable
/etc/profile
The systemwide initialization file, executed for login shells
~/.bash_profile
The personal initialization file, executed for login shells
~/.bashrc
The individual per-interactive-Shell startup file
~/.bash_logout
The individual login Shell cleanup file, executed when a login Shell exits
~/.inputrc
Individual readline initialization file
ログインシェルはあなたがログインしたものを読むものです(したがって、たとえばxtermを単に起動したときには実行されません)。ログインする方法は他にもあります。たとえばXディスプレイマネージャを使用します。ログイン時に環境変数を読み込んでエクスポートする方法は他にもあります。
マニュアルのINVOCATION
の章も読んでください。それは"次の段落はbashが起動ファイルを実行する方法を説明しています。"、私はそれがスポットオンだと思います:)それは "対話型"シェルも何であるかを説明します。
Bashは.environment
について知りません。私はそれがあなたが動かしているシェルとは無関係に環境変数を設定するためのあなたのディストリビューションのファイルだと思う。
~/.profile
は古典的にはBourne Shellによって使用されており、おそらくBashによってレガシー対策としてサポートされています。繰り返しますが、~/.login
と~/.cshrc
はCシェルによって使用されていました - Bashがそれらをまったく使用しているかどうかはわかりません。
~/.bash_profile
はログイン時に一度使用されます。 ~/.bashrc
スクリプトはシェルが起動されるたびに読み込まれます。これはCシェルの/.cshrc
に似ています。
1つの結果として、~/.bashrc
の内容は、非ログインシェルを起動するときのオーバーヘッドを減らすために、できるだけ軽量(最小限)にする必要があります。
~/.environment
ファイルはKornシェルの互換ファイルです。
まとめると、.bashrcと.bash_profile に関する情報がここにあります 。
ログイン時に.bash_profileが実行されます。あなたがそこに入れたものはあなたのPATHや他の重要な環境変数かもしれません。
.bashrcは非ログインシェルに使用されます。それがどういう意味かわからない。私はRedHatがあなたが別のシェルを起動するたびにそれを実行することを知っています(このユーザーにsuを押すか、あるいは単にbashを再度呼び出す)あなたはそこにエイリアスを入れたいかもしれません。私はそれを無視します。
.profileはルートの.bash_profileと同等です。他のシェル(csh、sh、tcsh)でも使用できるように名前が変更されたと思います。 (ユーザーとしては必要ありません)
実行される.bash_logoutもあります、そうだね... logout。あなたはデーモンを止めるか、あるいはちょっとしたハウスキーピングをしたいと思うかもしれません。ログアウト時に画面をクリアしたい場合は、そこに "clear"を追加することもできます。
また、各設定ファイル についての完全なフォローアップがここにあります 。
これらはおそらくディストリビューションにも依存します。すべてのディストリビューションがそれぞれの設定を持つことを選択するわけではありません。しかし、それらが同じ名前を持つとき、彼らは通常同じ内容を含みます。
Josh Staiger によると、Mac OS XのTerminal.appは新しい端末ウィンドウごとにデフォルトで非ログインシェルではなくログインシェルを実行し、.bashrcではなく.bash_profileを呼び出します。
彼はお勧めします:
ほとんどの場合、ログインシェル用と非ログインシェル用の2つの別々の設定ファイルを管理する必要はありません - PATHを設定するときは、両方に適用する必要があります。あなたはあなたの.bash_profileファイルから.bashrcを供給し、それからPATHと共通設定を.bashrcに入れることによってこれを修正することができます。
これを行うには、.bash_profileに次の行を追加します。
if [ -f ~/.bashrc ]; then source ~/.bashrc fi
コンソールからあなたのマシンにログインすると、今度は.bashrcが呼ばれます。
見るのに良い場所はbashのmanページです。 こちら はオンライン版です。 "INVOCATION"セクションを探してください。
私は.profile
を実行するように見えるが.bash_profile
は実行しないようなDebianファミリーディストリビューションを使用しました、一方RHEL派生物は.bash_profile
の前に.profile
を実行します。
あなたがどんなLinux OSでも動くように環境変数を設定しなければならないとき、それは混乱のようです。