質問

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

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

役に立ちましたか?

解決

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

その後、&quot; interactive&quot;によって読み取られる設定ファイルがあります。シェル(たとえば、端末(または、ウィンドウシステムで実行される端末エミュレータの場合は擬似端末)に接続されているシェル)。これらは、 .bashrc 、< code> .tcshrc 、 .zshrc など

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

[[-r〜/ .bashrc]]&amp;&amp; 。 〜/ .bashrc

他のシェルの動作は異なります。たとえば、 zsh の場合、 .zshrc は、ログインシェルであるかどうかに関係なく、常にインタラクティブシェルで読み取られます。

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

.profile は、元々 / bin / sh が使用していたログインスクリプトファイル名です。一般に / bin / sh との下位互換性がある bash は、存在する場合は .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 の章もお読みください。 &quot;次の段落では、bashがスタートアップファイルを実行する方法について説明しています。&quot; 、それはスポットオンだと思います:)シェルも。

Bashは .environment を認識しません。私はあなたのディストリビューションのファイルだと思います。あなたが運転するシェルとは無関係に環境変数を設定します。

古典的に、〜/ .profile はBourne Shellによって使用され、おそらくBashによってレガシーメジャーとしてサポートされます。繰り返しますが、〜/ .login 〜/ .cshrc はCシェルで使用されていました-Bashがそれらを使用するかどうかはわかりません。

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

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

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

.bashrcおよび.bash_profileに関する情報を見つけましたこちらまとめると:

  

.bash_profileは、次の場合に実行されます   ログイン。そこに入れるものは   PATHおよびその他の重要な   環境変数。

     

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

     

.profileは次と同等です   ルートの.bash_profile。おもう   名前を変更して他の   シェル(csh、sh、tcsh)も同様に使用します。   (ユーザーとしては必要ありません)

     

.bash_logout wichもあります   で実行します、そうですね...ログアウト。   デーモンを止めたいかもしれません   少し家事をする。あなたはできる   また、「クリア」を追加します。あなたが望むならそこに   ログアウトしたら画面をクリアします。

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

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

Josh Staiger によると、実際にはMac OS XのTerminal.appデフォルトでは、新しいターミナルウィンドウごとに非ログインシェルではなくログインシェルを実行し、.bashrcではなく.bash_profileを呼び出します。

彼が推奨するもの:

  

ほとんどの場合、2つの個別の設定ファイルを維持したくない   ログインシェルおよび非ログインシェル用&#8212; PATHを設定するときは、   両方に適用されます。これを修正するには、.bashrcをソースから   .bash_profileファイル、次にPATHおよび共通設定を.bashrcに入れます。

     

これを行うには、次の行を.bash_profileに追加します。

if [ -f ~/.bashrc ]; then 
    source ~/.bashrc 
fi
     

今、あなたがログインするとき   コンソールからマシン.bashrcが呼び出されます。

bash の man ページを参照するとよいでしょう。 ここはオンライン版です。「INVOCATION」セクションを探してください。

.profile を実行すると思われるDebianファミリのディストリビューションを使用しましたが、 .bash_profile は実行しません。 一方、RHEL派生物は .profile の前に .bash_profile を実行します。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top