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


245

OS Xでターミナルのエイリアスを作成するには、エイリアスを.bash_profileまたはに配置します.bashrc。この2つの違いは何ですか?また、エイリアスを他ではなく一方に配置することを選択する理由は何ですか?


5
ここでUNIXの知識を落胆させないために、bashは純粋なUNIXの獣なので、より良い知識を得るか、パートナーサイトでこの質問に何度も答えてもらうことができます。優に200 bashrcに質問/回答のペアは上の上にあります。UNIX
bmike

.profileもあります... Stack Overflowでこの質問を参照してください。
ヤアコフバルーク

2
あなたの場合brew install bashとiTerm2を使用するには、設定することができますprofile -> command/usr/local/bin/bashロードする.bashrc後のデフォルトで.bash_profile。これはまた、あなたの4つのグッズ...バッシュを与える
レイ・フォス

.bashrcは何年も使用されておらず、デフォルトでは機能しないと聞きました。.bash_profileはmacosxで使用されています。そして、私は.bashrcにしようと、tは私のために動作しませんでしたが、.bash_profileをやった
barlopを

回答:


247

.bash_profileログインシェルに対して.bashrc実行され、対話型の非ログインシェルに対して実行されます。

コンソールからログイン(ユーザー名とパスワードを入力)すると.bash_profile、最初のコマンドプロンプトの前に、マシンに座っているか、ssh:を介してリモートでシェルが実行されます。

ただし、すでにマシンにログインして新しいターミナルウィンドウ(xterm)を開いている場合.bashrcは、ウィンドウコマンドプロンプトの前に実行されます。ターミナルに.bashrc入力/bin/bashして新しいbashインスタンスを開始するときにも実行されます。

OS Xでは、ターミナルはデフォルトで毎回ログインシェルを実行するため、これは他のほとんどのシステムとは少し異なりますが、設定で設定できます。


57
On OS X, Terminal by default runs a login shell every time-私はこれに気づかないことでいつも混乱しています。素晴らしい情報!
ヴォーン

1
@アレックス、OS X端末が毎回ログインシェルを実行するのはなぜですか?
パセリエ

17
「一部のApple開発者は元々その違いを認識していなかったので、今ではいくつかのジャンボジャンボに安置されています。
スノークラッシュ

2
私はOS Xを使用していますが、bashの代わりにzshellを使用し、Terminalの代わりにiTermを使用しています。私が答えとは異なる端末と異なるシェルを使用しているという事実にもかかわらず、OS X .zprofileは毎回実行されるため、すべてをログインシェルと見なしているようです。
アダムツェルナー

1
ログイン/非ログインシェルと対話型/非対話型シェルの組み合わせの詳細な説明、およびこれらの構成ファイルを実行するタイミング
a / 46856/

45

X11はあなた.bashrcを見て、「通常の」ターミナルは.bash_profile

ただし、次をに追加すると、.bash_profileすべてを.bashrcファイルに移動して、すべてを2つではなく1つの場所に統合できます。

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

または、あなたはただすることができましたcd ~ ; ln -s .bashrc .bash_profile
lhf

5
これら2つの構成ファイルには、明らかに別個の機能があります。場合によっては、セッションの開始時とそこでのみ初期化する必要があります(~/.bash_profile)。また、多くの場合、すべてのシェルレベルで増分を定義するものが必要です(~/.bashrc)。この自由を抑圧することを提案するのは最良のアイデアではありません。
ダン

3
@danielAzuelos:Lurchはこの部分を省略しましたが、OS Xターミナル~/.bash_profileはすべての新しいウィンドウ/タブをソースしているため、ターミナルに関する限り、これら2つを実際に分離する方法はありません。
ミパディ14年

14
@mipadiそれらを分離する価値はまだあります。たとえば.bash_profile、子プロセスで再びソースを取得することはできません。ネストされたバッシュ源のすべてのレベルは、.bashrcあなたのような何かを置くならば、そうexport A=a:$Aでは.bashrc、あなたは$A、ネストされたバッシュに長くなります。通常、プロファイルには環境変数を、RCにはエイリアスを残します。
フランクリンゆう

@FranklinYu多くの人にとってそれほど大したことではないかもしれませんが、私は完全に同意します!それは人々に思い出させるための素晴らしい技術的ポイントであり、より多くの賛成に値する。
18年

24

macOSの場合、.bash_profileすべてを統合するために配置するコード.bashrcは次のとおりです。

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

これは、Mac端末ユーザー向けです。


6
本当ですが、これは2012年のLurchの回答とどう違うのですか?
アルジャン

0

TLDR; .bash_profileエイリアスに使用します。

異なる初期化ファイルが連携する方法はもう少し複雑で、OSXにはいくつかの重要な特別なケースがあります。ハイライトは次のとおりです。

  • Bashは、どのプラットフォームでも、起動方法に応じていくつかの異なるファイルのいずれかを実行します。詳細はこちらです。
  • OSXのターミナルアプリは、非標準的な処理を実行します.bash_profile。ログインシェルであるかのように、すべての新しいタブまたはウィンドウを作成します。つまり、呼び出されます。したがって、上記のTLDRアドバイス。
  • .bashrcオプションもあるが、それはあなたがサブシェル(すなわち、呼び出しを作成するたびに呼び出されますbashあなたは、その中の変数(例えば、更新する場合の非効率性を作成することができます)、 PATH=/bin/foo:$PATH
  • 端末が埋め込まれている他のアプリは、端末アプリの規則に従うかどうかを選択できます。特に、Visual Studio Codeはデフォルトではそうではありません
  • GUIを介して起動されたアプリは、シェルから生成されません。したがって、環境変数を設定するためのいくつかの競合するメカニズムがあり、それらは見るために長年にわたって変化しています。
  • 呼び出しスニペット.bashrcからは.bash_profileかなり一般的です。私はそれをお勧めしませんが、それは好みです。

.bash_profileエイリアスを正確に使用するのはなぜ複雑なのですか?部分的にしかリストしない項目はエイリアスに関するものなので、なぜそれが複雑なように見えるかを説明する箇条書きを単にリストする代わりに、これらの制約内でそれをより簡単にする方法を提案できますか?
nohillside

あなたの言ってる事がわかります。.bash_profileの使用が複雑なわけではありません。ファイルが呼び出される方法は複雑です。更新します。
レオ

GNU bashマニュアルでは.bash_profileから.bashrcを呼び出すことをお勧めします-さもなければ、ログインシェルと非対話型シェルの両方で必要な変数などをどのように設定しますか?
マーク

異なるOSで使用するすべてのターミナルエミュレータには、ログインシェル、xterm、およびXfceとして新しいウィンドウを実行して、2つだけを指定するオプションがあります。
fd0
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.