私の.bashrcファイルが.profileから読み込まれないのはなぜですか?

私の.bashrcファイルが.profileから読み込まれないのはなぜですか?

私の.profileファイルには次の行があります。

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

私のファイルが存在することを確認してください.bashrc(存在する場合)。また、何らかの理由で動作が異なる環境を設定するために新しいコンピュータで実行される設定スクリプトもあります。

設定スクリプトが終了すると、次のようになります。

# read .profile
source "$USERDIR/.profile"

私のホームディレクトリを指します$USERDIR.profileこのスクリプトが実行されたときに「.profile sourced」をエコーし​​、スクリプトが完了すると印刷するため、正しくソースが提供されることがわかります。

ただし(このインストールファイルから起動した場合)は.bashrc読み込まれません。タイプするだけでうまく動作するので、なぜそうなのかわかりません。.profile.profilesource .profilebash

.bashrc私のrcファイルのエコーラインは、.profileこの設定スクリプトではなく、直接インポートしたときにのみエコーされるため、実行されないことがわかります。.bashrcスクリプトをインポートしようとすると、if [ -f ~/.bashrc ].profileと同時に生成されたため、スクリプトが存在します(したがって実行する必要があります)。

答え1

段階的に。に追加.profile

# source bashrc if it exists
if [ -f ~/.bashrc ]; then
    echo ".profile is sourcing " ~/.bashrc
    source ~/.bashrc
fi

その後、bashをlogin:で呼び出すだけでbash -l十分です。

.profile is sourcing /home/user/.bashrc次の行が印刷されましたか?

その場合、問題は次のとおりです。

  • 次のファイルが存在しますか? ~/.bash_profile, ~/.bash_login
  • このオプションでbashが呼び出されますか--noprofile
  • または、設定スクリプトを使用します。

そうでない場合、問題は.profileおよびまたはにあります.bashrc

  • ユーザーディレクトリとして〜の代わりに$ HOMEを使用する必要があるかもしれません。
  • 対話式に実行されていないときに実行を防ぐbashrc行がある可能性があります。

    # If not running interactively, don't do anything
    [ -z "$PS1" ] && return
    

答え2

$USERDIR私のホームディレクトリを指します。

正確にどこを指していますか$HOME? Bashでは、~常に任意のポイントに拡張してください$HOME。正しく設定されていないためにできない場合は、source ~/.profile実行できません。$HOME$USERDIR/.profilesource ~/.bashrc

関連情報