bashrcコマンドはシェルの再ロードをサポートする必要がありますか?

bashrcコマンドはシェルの再ロードをサポートする必要がありますか?

ユーザーが新しい端末を開かずにシェルを再ロードするたびに、exec $SHELLファイルはbashrc再実行されます。

問題は次のとおりです。

シェルの起動時に実行することを意図したコマンドは、これを明示的にサポートする必要がありますか?

もちろん、シェル機能はシェルプロセスの交換後も維持できませんが、環境変数は可能です。したがって、一般的な副作用はPATH物を何度も追加することです。

客観的な立場を維持するために、私は主にこれに正式なガイドラインがあるかどうかに興味があります。

答え1

この.bashrcファイルはあなたのアイテムを保持するように設計されています考える新しい対話型シェルが起動されるたびに実行されます。これは変数を設定するのに適した場所ではありませんPATH。たとえば、各シェルの初期化で実行する必要がある項目のみを含める必要があります。

これがbashプロファイルの2つの「系列」がある理由です。

  • /etc/bashrc~/.bashrc新しい本を読むたびに インタラクティブシェルそれはログインシェルではありません始まった。

  • /etc/profile~/.bash_profile~/.bash_loginおよび(順番に)新しい対話型ログインシェルが起動されるたびに取得されます。~/.profile

実際、ほとんどのシステムでは、これはログイン時にこのファイルセットを一度読んだ後、新しい端末を開くか、新しい対話型シェルを起動するたびに読み取られることを~/.profile意味します。~/.bashrc

したがって、新しいシェルを起動するたびに何かが実行されて~/.bashrc問題が発生した場合は、システムが誤って設定され~/.bashrc使用されていることを意味します。しなければならない~/.bash_profileまたはを使用してください~/.profile。つまり、.bashrc新しい対話型の非ログインシェルが起動するたびに実行する必要があります。

答え2

/etc/profileにあるこの機能を使用できます。

pathmunge () {
    case ":${PATH}:" in
        *:"$1":*)
            ;;
        *)
            [ ! -d "$1" ] && return
            if [ "$2" = "after" ] ; then
                PATH=$PATH:$1
            else
                PATH=$1:$PATH
            fi
    esac
}

ディレクトリを追加する前に、ディレクトリがすでにPATHにあることを確認してください。

~/.profile または ~/.bash_profile でこれを使用します。

path_munge /directory/to/add before
# or
path_munge /directory/to/add/also after

PATHに必要なディレクトリを追加します。

/ etc / profileはこの機能を抑制するので、自分のプロフィールにコピーしてください。

関連情報