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を使用しており、dwm
とst
を使用しています。 .bash_profile
と.profile
を使用してみましたが、うまくいきませんでした。
何か案は?
なぜそれを調達するのですか?あなたは本当のbash
を実行していません:
$ 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
は読み取られません。 chsh -s /bin/bash
を使用して、デフォルトのシェルをbashに設定するだけです。
.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