142

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

私が使用すると

alias ls='ls -F'

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

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

非ログイン シェルの場合

.bash_profileファイルには次のようなコメントがあります

ログインシェル用

では、エイリアスはどこに記述すればよいのでしょうか? なぜログイン シェルと非ログイン シェルを分けるのでしょうか。

一部の Web ページでは use と書か.bash_aliasesれていますが、Mac OS X では動作しないようです。

4

4 に答える 4

182

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

個人的には、

  • 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 に入力したかのようにファイルが読み込まれます。

于 2009-05-24T02:42:47.533 に答える
138

チェックアウトhttp://mywiki.wooledge.org/DotFilesは、man bash.

概要:

  • ログインは 1 回だけで、そのときに~/.bash_profileor~/.profileが読み取られて実行されます。ログイン シェルから実行するものはすべてログイン シェルの環境を継承するため、すべての環境変数をそこに配置する必要があります。ようLESSPATH、、、、... 例については、次を参照してくださいMANPATHLC_*.profile
  • ログインすると、さらにいくつかのシェルを実行できます。ログインして X を実行し、X で bash シェルを使用していくつかの端末を起動することを想像してみてください。これは、ログイン シェルが X を起動し、ログイン シェルの環境変数を継承し、端末を起動し、非ログイン bash シェルを起動したことを意味します。環境変数はチェーン全体で渡されたので、非ログイン シェルはそれらをロードする必要がなくなりました。非ログイン シェルは、 orでは~/.bashrcなく、この正確な理由でのみ実行されるため、 bash にのみ適用されるすべてのものを定義します。それは、関数、エイリアス、HISTSIZE (これは環境変数ではありません。エクスポートしないでください!) などの bash 専用変数、およびを使用したシェル オプションなどです。例については、次を参照してください。/.profile~/.bash_profilesetshoptじぶんの.bashrc
  • 現在、UNIX の特性の一部として、login-shell は実行されず、 or~/.bashrcのみが実行されるため、後者から手動で取得する必要があります。あなたは私が私のあまりにもそれを行うのを見るでしょう: .~/.profile~/.bash_profile~/.profilesource ~/.bashrc
于 2009-05-24T06:22:37.773 に答える
13

bashマンページから:

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

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

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

したがって、ログイン シェルとインタラクティブな非ログイン シェルの両方で同じ動作を得たい場合は、すべてのコマンドを または のいずれ.bashrc.bash_profileに配置し、もう一方のファイルソースを最初のファイル ソースにする必要があります。

于 2009-05-24T02:46:23.080 に答える
4

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

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

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

于 2009-05-24T02:42:07.783 に答える