Bash は手動で起動しない限り .bashrc を読み取りません

Bash は手動で起動しない限り .bashrc を読み取りません

bashターミナルから.bashrc手動で実行しない限り、対話型ターミナルからはソースされません。bash

$ 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 を使用しており、dwmと を使用していますst。 と の使用を試みました.bash_profileが、.profile成功しませんでした。

何か案は?

答え1

.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

答え2

なぜそれをソースするのでしょうか? デフォルトのシェルは bash ではありませんがsh

$ echo $SHELL
/bin/sh

最近のシステムのほとんどでは、sh基本的なシェルへのシンボリックリンクです。たとえば、私の Debian では次のようになります。

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

あなたの場合、shは へのリンクですbashが、 で説明されているようにman bash

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

そして

--norc
シェルが対話型の場合、システム全体の初期化ファイル /etc/bash.bashrc と個人の初期化ファイル ~/.bashrc を読み取って実行しません。 シェルが sh として呼び出される場合、このオプションはデフォルトでオンになります。

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

関連情報