web-dev-qa-db-ja.com

.bash_profile、.bashrc、およびエイリアスの書き込み先について

可能性のある複製:。bashrc、.bash_profile、および.environmentの違いは何ですか?

私が使用すると

alias ls='ls -F'

mac OS Xの.bashrc内では、新しく作成されたシェルにはそのエイリアスがありません。 bashをもう一度入力する必要があり、そのエイリアスが有効になります。

ホスティング会社のLinuxにログインすると、.bashrcファイルには、次のようなコメント行があります。

非ログインシェルの場合

そしてその .bash_profileファイルにはコメントがあります

ログインシェル用

それでは、エイリアスはどこに書かれるべきですか?ログインシェルと非ログインシェルを分離する方法を教えてください。

一部のウェブページでは、.bash_aliasesが、Mac OS Xでは動作しないようです。

117

loginnon-login Shellを分離する理由は、Bashの新しいコピーを開始するたびに.bashrcファイルがリロードされるためです。 .profileファイルは、ログインするか、適切なフラグを使用してログインシェルとして動作するようにBashに指示した場合にのみロードされます。

個人的に、

  • PATHセットアップを.profileファイルに配置しました(他のシェルを使用することがあるため)。
  • Bashのエイリアスと関数を.bashrcファイルに入れました。
  • これを入れます

    #!/bin/bash
    #
    # CRM .bash_profile Time-stamp: "2008-12-07 19:42"
    #
    # echo "Loading ${HOME}/.bash_profile"
    source ~/.profile # get my PATH setup
    source ~/.bashrc  # get my Bash aliases
    

    .bash_profileファイル内。

ああ、新しいエイリアスを取得するためにbashを再度入力する必要があるのは、Bashが起動時に.bashrcファイルをロードするが、指示がない限りリロードしないためです。次のように入力することで、.bashrcファイルをリロードできます(2番目のシェルは不要です)。

source ~/.bashrc

.bashrcファイルを、Bashに直接コマンドを入力したかのようにロードします。

157
Charlie Martin

man bash以外のトピックに関する優れたリソースについては、 http://mywiki.wooledge.org/DotFiles を参照してください。

概要:

  • ログインするのは一度だけで、それが~/.bash_profileまたは~/.profileが読み取られて実行されるときです。ログインシェルから実行するものはすべてログインシェルの環境を継承するため、すべての環境変数をそこに配置する必要があります。 LESSPATHMANPATHLC_*、...などの例については、以下を参照してください: My .profile
  • ログインすると、さらにいくつかのシェルを実行できます。ログインして、Xを実行し、Xでbashシェルを使用していくつかの端末を起動することを想像してください。つまり、ログインシェルはXを起動し、ログインシェルの環境変数を継承し、ターミナルを起動し、非ログインbashシェルを起動しました。環境変数はチェーン全体で渡されるため、非ログインシェルはそれらをロードする必要がなくなります。非ログインシェルは、~/.bashrc/.profileではなく、~/.bash_profileのみを実行します。このため、はbashにのみ適用されるすべてを定義します。それは、関数、エイリアス、HISTSIZEのようなbash専用の変数です(これは環境変数ではないので、エクスポートしないでください!)、Shell options with setおよびshoptなど。例については、以下を参照してください: My .bashrc
  • 現在、UNIXの特性の一部として、ログインシェルは~/.bashrcを実行せず、~/.profileまたは~/.bash_profileのみを実行するため、後者から手動でソースする必要があります。 ~/.profileでも同じことができます:source ~/.bashrc
117
lhunath

Bashのマンページから:

Bashが対話型ログインシェルとして、または--loginオプション付きの非対話型シェルとして呼び出されると、bashは、ファイルが存在する場合、最初にファイル/etc/profileからコマンドを読み取り、実行します。そのファイルを読み取った後、~/.bash_profile~/.bash_login、および~/.profileをこの順序で探し、存在し、読み取り可能な最初のコマンドからコマンドを読み取り、実行します。 --noprofileオプションは、この動作を禁止するためにシェルを開始するときに使用できます。

ログインシェルが終了すると、bashはファイル~/.bash_logout(存在する場合)からコマンドを読み取り、実行します。

ログインシェルではないインタラクティブシェルが開始されると、bashは~/.bashrcからコマンドを読み取り、実行します(そのファイルが存在する場合)。これは、--norcオプションを使用することで禁止できます。 --rcfileファイルオプションは、bashが~/.bashrcの代わりにファイルからコマンドを強制的に読み取り、実行するようにします。

したがって、ログインシェルと非ログインインタラクティブシェルの両方で同じ動作を取得したい場合は、すべてのコマンドを.bashrcまたは.bash_profileのいずれかに入れてから、他のファイルを用意する必要があります- source 最初のもの。

12
Adam Rosenfield

.bash_profileは、「ログインシェル」用にロードされます。 OS Xではどうなるかはわかりませんが、LinuxではX11または仮想端末のどちらかです。

.bashrcは、Bashを実行するたびにロードされます。新しいTerminal.appウィンドウを開くたびに、ロードしたいものを置くべき場所です。

私は個人的にすべてを.bashrcこれにより、変更を有効にするためにアプリケーションを再起動する必要がなくなります。

2
Sionide21