ユーザーが新しい端末を開かずにシェルを再ロードするたびに、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はこの機能を抑制するので、自分のプロフィールにコピーしてください。