.bashrc、.bash_profile、.environment の違いは何ですか?
-
03-07-2019 - |
質問
私はここ数年、さまざまな *nix ベースのシステムを使用してきましたが、使用する Bash の種類ごとに、実行する起動スクリプトを決定するアルゴリズムが異なるようです。環境変数とエイリアスの設定、起動メッセージの出力などのタスクの目的のため (例:MOTD)、これらを実行するにはどの起動スクリプトが適切ですか?
物を入れるのと何が違うの? .bashrc
, .bash_profile
, 、 そして .environment
?次のような他のファイルも見ました .login
, .bash_login
, 、 そして .profile
;これらは関連することがありますか?物理的にログインした場合、ssh 経由でリモートにログインした場合、新しいターミナル ウィンドウを開いた場合に実行されるものにはどのような違いがありますか?プラットフォーム間 (Mac OS X (およびその Terminal.app) および Cygwin Bash を含む) に大きな違いはありますか?
解決
シェルの設定ファイルとの主な違いは、一部が" login"によってのみ読み取られることです。シェル(たとえば、別のホストからログインするとき、またはローカルUNIXマシンのテキストコンソールでログインするとき)。これらは、たとえば .login
または .profile
または .zlogin
と呼ばれます(使用しているシェルによって異なります)。
その後、" interactive"によって読み取られる設定ファイルがあります。シェル(たとえば、端末(または、ウィンドウシステムで実行される端末エミュレータの場合は擬似端末)に接続されているシェル)。これらは、 .bashrc
、< code> .tcshrc 、 .zshrc
など
bash
はこれを複雑にします。 .bashrc
は、 インタラクティブと非ログインの両方であるシェルによってのみ読み取られるためです。 。ほとんどの人は、 .bash_profile
に .bashrc
を次のようなもので読むように言うことになります。
[[-r〜/ .bashrc]]&amp;&amp; 。 〜/ .bashrc
他のシェルの動作は異なります。たとえば、 zsh
の場合、
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で動作するように環境変数を設定する必要がある場合、混乱するようです。