.bashrc、.bash_profile、.environmentの違いは何ですか?


130

私は何年にもわたってさまざまな* nixベースのシステムを使用してきましたが、使用するBashのフレーバーには、実行する起動スクリプトを決定するためのアルゴリズムがそれぞれ異なるようです。環境変数とエイリアスの設定や起動メッセージ(例:MOTD)の出力などのタスクのために、これらを実行するのに適切な起動スクリプトはどれですか。

何で物事を置くことの違いだ.bashrc.bash_profile.environment?私はまた、のような他のファイルを見てきた.login.bash_login.profile。これらは今までに関連していますか?物理的にログインし、sshを介してリモートでログインし、新しいターミナルウィンドウを開いたときに実行される違いは何ですか?プラットフォーム(Mac OS X(およびそのTerminal.app)とCygwin Bashを含む)間で大きな違いはありますか?

回答:


73

シェル構成ファイルとの主な違いは、一部は「ログイン」シェルによってのみ読み取られることです(たとえば、別のホストからログインするとき、またはローカルUNIXマシンのテキストコンソールにログインするとき)。これらは言う、と呼ばれるものであり、.loginまたは.profileまたは.zloginます(使用しているシェルによって異なります)。

次に、「対話型」シェル(端末(またはウィンドウシステムで実行されている端末エミュレータの場合は疑似端末)に接続されているシェルなど)によって読み取られる構成ファイルがあります。これらは名前が付いたファイルです。以下のように.bashrc.tcshrc.zshrc、など

bashこのように複雑にし.bashrcているだけで、両方のシェルで読み取り、インタラクティブおよび非ログインあなたはほとんどの人が自分に言って終わる見つけることができますので、.bash_profileまた読むため.bashrcのようなもので

[[ -r ~/.bashrc ]] && . ~/.bashrc

その他のシェルは異なる動作を-例えばとともにzsh.zshrc常にそれがログイン1かありませんか、対話型シェルのために読まれます。

bashのマニュアルページでは、各ファイルが読み取られる状況について説明しています。はい、動作は通常、マシン間で一貫しています。

.profileは、最初にが使用したログインスクリプトのファイル名/bin/shです。bashは一般にと下位互換性があり/bin/sh.profile存在する場合は読み取ります。


48

それは簡単です。それはで説明されてい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はその起動ファイルを実行する方法について説明します。」、私はそれがスポットオンだと思います:)それは「インタラクティブな」シェルも何であるかを説明します。

バッシュは知らない .environment。駆動しているシェルとは独立して環境変数を設定するために、これはディストリビューションのファイルだと思います。


1
/etc/bashrc答えをフルフィルに追加できますか?
Nemoden 2012

9

古典的に~/.profileは、Bourne Shellによって使用され、おそらくレガシー測定としてBashによってサポートされています。もう一度、~/.loginそして~/.cshrc Cシェルで使用された-私はbashがすべてでそれらを使用していることはよく分かりません。

~/.bash_profileログイン時に、一度使用されます。~/.bashrcスクリプトはシェルが起動されるたびに読み込まれます。これは/.cshrc Cシェルの場合ます。

1つの結果は~/.bashrc、非ログインシェルを起動するときのオーバーヘッドを減らすために、可能な限り軽量(最小)であることです。

この~/.environmentファイルはKorn Shellの互換性ファイルだと思います。


7

.bashrcと.bash_profileに関する情報をここに見つけて要約します:

ログインすると.bash_profileが実行されます。あなたがそこに入れたものはあなたのPATHと他の重要な環境変数かもしれません。

.bashrcは、非ログインシェルに使用されます。どういう意味かわかりません。RedHatは別のシェルを起動するたびにそれを実行することを知っています(このユーザーにsuを実行するか、単にbashを再度呼び出します)。私は単にそれを無視します。

.profileは、ルートの.bash_profileと同等です。他のシェル(csh、sh、tcsh)でも使用できるように名前が変更されたと思います。(ユーザーとしては必要ありません)

実行される.bash_logoutもあります。そうですね...ログアウト。deamonを停止するか、少しのハウスキーピングを作成することもできます。ログアウト時に画面をクリアしたい場合は、そこに「クリア」を追加することもできます。

また、各構成ファイルの完全なフォローアップがあります ここにあります

これらはおそらくディストリビューションにも依存します。すべてのディストリビューションがそれぞれの構成を選択するわけではありません。ただし、同じ名前の場合、通常は同じコンテンツが含まれます。


4

ジョシュ・ステイガーによると、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が呼び出されます。



0

私は、実行されているように見えても実行さ.profileれていないように見えるDebianファミリのディストリビューションを使用しましたが.bash_profile、RHEL派生物は.bash_profile以前に実行され.profileます。

Linux OSで動作するように環境変数を設定する必要がある場合、混乱のようです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.