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


22

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が、成功しませんでした。

何か案は?

回答:


19

なぜそれを調達するのですか?あなたはtrueを実行していません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

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

そして

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

だから、あなたのデフォルトのシェルがあることからsh.bashrc読んでいないです。を使用してデフォルトのシェルをbashに設定するだけですchsh -s /bin/bash


ありがとうございました。私が/bin/sh指摘して以来、それは問題でないと思いました/bin/bash。この問題/bin/bashは、ユーザーアカウントを最初に作成したときにシェルを明示的に割り当てなかったことに起因すると考えられます。
急いで

また、Debianの/ Ubuntuはに切り替えるdashための/bin/sh起動時間を短縮するための努力の一環として。ユーザーがシェルの動作が異なる理由を尋ね始めたとき、これは陽気でした。
kurtm

18

.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

1
@terdonあなたの答えは正しいものです。私の答えは、彼が走っていた場合にのみ有効ですbash。いいキャッチ、私はそれを見逃した。
Jeight

これは、デフォルトで使用するbashなど、別のシェルと一緒に実行する場合、いくつかの頭痛の種になるかもしれません。ksh93.profile
クサラナナンダ

〜/ .bash_profileが存在しない場合は、作成できます。
プラティックシンハル

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.