130

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

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

4

7 に答える 7

73

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

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

bashこれは、インタラクティブログインしていないシェルによってのみ読み取られるという.bashrc点でこれを複雑にします。したがって、ほとんどの人は、次のようなものでも読み取るように指示することになります。.bash_profile.bashrc

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

他のシェルの動作は異なります。たとえば withはzsh.zshrcログイン シェルであるかどうかに関係なく、対話型シェルに対して常に読み取られます。

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

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

于 2009-01-06T04:18:33.397 に答える
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がスタートアップファイルを実行する方法について説明します。」と書かれています。、私はそれがスポットオンだと思います:)それは「インタラクティブ」シェルも何であるかを説明します。

Bashはについて知りません.environment。あなたが運転するシェルから独立して環境変数を設定するために、それはあなたのディストリビューションのファイルだと思います。

于 2009-01-06T15:21:30.877 に答える
9

古典的に~/.profileは、Bourne Shell で使用されており、おそらくレガシー対策として Bash でサポートされています。繰り返しますが、~/.loginC~/.cshrcシェルで使用されていました。Bash がそれらを使用しているかどうかはわかりません。

~/.bash_profile、ログイン時に 1 回使用されます。~/.bashrcスクリプトは、シェルが開始されるたびに読み取られます。/.cshrcこれは、C シェルの場合と似ています。

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

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

于 2009-01-06T04:13:18.823 に答える
7

要約すると、.bashrc と .bash_profile に関する情報が見つかりました。

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

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

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

.bash_logout で実行されるものもあります。ええ、いいと思います...ログアウト。デーモンを停止したり、ちょっとしたハウスキーピングをしたいかもしれません。ログアウト時に画面をクリアしたい場合は、そこに「クリア」を追加することもできます。

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

これらはおそらくディストリビューションに依存するものであり、すべてのディストリビューションがそれぞれの構成を選択するわけではなく、一部のディストリビューションはさらに多くの構成を備えています。ただし、同じ名前の場合、通常は同じ内容が含まれます。

于 2009-01-06T04:03:39.043 に答える
4

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 が呼び出されます。

于 2012-02-27T00:22:05.517 に答える
2

参照するのに適した場所は、bash の man ページです。こちらがオンライン版です。「INVOCATION」セクションを探します。

于 2009-01-06T04:06:21.893 に答える
0

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

Linux OS で動作するように環境変数を設定しなければならない場合、混乱するようです。

于 2012-05-21T10:42:00.943 に答える