web-dev-qa-db-ja.com

手動で開始しない限り、bashは.bashrcを読み取りません

bashは、ターミナルから手動でbashを実行しない限り、インタラクティブターミナルから.bashrcを取得しません。

$ bash

または手動で入手:

$ source ./.bashrc

または実行中:

$ st -e bash

これが私が望むいくつかの有用な出力です:

$ echo $TERM
st-256color

$ echo $Shell
/bin/sh

$ readlink /bin/sh
bash

$ shopt login_Shell
login_Shell     off

CRUX Linux 3.0を使用しており、dwmstを使用しています。 .bash_profile.profileを使用してみましたが、うまくいきませんでした。

何か案は?

23
haste

なぜそれを調達するのですか?あなたは本当のbashを実行していません:

$ echo $Shell
/bin/sh

最近のほとんどのシステムでは、shは基本的なシェルへのシンボリックリンクです。例えば私のDebianでは:

$ ls -l /bin/sh 
lrwxrwxrwx 1 root root 4 Aug  1  2012 /bin/sh -> dash

あなたの場合、shbashへのリンクですが、man bashで説明されています:

Bashがshという名前で呼び出された場合、POSIX標準にも準拠しながら、shの過去のバージョンの起動時の動作をできるだけ模倣しようとします。 [...] shという名前のインタラクティブシェルとして呼び出されると、bashは変数ENVを探し、定義されている場合はその値を展開し、展開された値を読み取りおよび実行するファイルの名前として使用します。 shとして呼び出されたシェルは、他の起動ファイルからコマンドを読み取って実行しようとしないなので、-rcfileオプションは効果がありません。

そして

--norc
シェルがインタラクティブな場合は、システム全体の初期化ファイル/etc/bash.bashrcおよび個人用初期化ファイル〜/ .bashrcを読み取って実行しないでください。 シェルがshとして呼び出された場合、このオプションはデフォルトでオンになります。

したがって、デフォルトのシェルはshであるため、.bashrcは読み取られません。 chsh -s /bin/bashを使用して、デフォルトのシェルをbashに設定するだけです。

19
terdon

.bash_profileに、次のものがあることを確認します。

# .bash_profile

# If .bash_profile exists, bash doesn't read .profile
if [[ -f ~/.profile ]]; then
  . ~/.profile
fi

# If the Shell is interactive and .bashrc exists, get the aliases and functions
if [[ $- == *i* && -f ~/.bashrc ]]; then
    . ~/.bashrc
fi
20
Jeight