新しいターミナルを開くときに.bashrcが実行されない


84

Ubuntu 12.04で新しいターミナルウィンドウを開くと、.bashrcのコードは実行されません。.bash_aliasesファイルを作成するときにこれに気付きました。新しいターミナルを開いたときにエイリアスが表示されませんでした。ただしsource .bashrc、エイリアスを入力すると表示されました。

.bashrcは、新しいターミナルウィンドウを開くたびに実行する必要がありますか?

どうすればこれを実現できますか?


代わりに.profileを試してください。
ジッピー

4
@jippieいいえ、.profileどこかに設定の誤りがない限り、新しいターミナルを開いたときではなく、ログイン時に読み取られます。セラ:デフォルトの設定から何か変更しましたか?ps -o command $$ $PPIDターミナルで実行し、出力をコピーして貼り付けてください。
ジル

1
確実に確認するため.bashrcに、ホームフォルダーに入れますか?
ジェド

確認したいかもしれませんecho $SHELL。これは私に起こり、シェルはbashではなく/ bin / shでした。/ etc / passwdおよびその実行中の.bashrcで修正します。
ジョーフリン

回答:


128

必ずしも実行されるわけではありません。標準の.bashrcの一番上にこのコメントがあります:

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

ログインシェルとしてbashターミナルを実行するかどうかのオプションがあると思います。Ubuntuでは、gnome-terminalは通常ログインシェルとして実行されないため、.bashrcを直接実行する必要があります。

ログインシェル(仮想端末など)の場合、通常、ファイル~/.profileは実行されます(ただし、~/.bash_profileまたはのいずれか~/.bash_loginがない場合)。ただし、デフォルトでは存在しません。デフォルトでは、Ubuntuは.profileのみを使用します。

標準に~/.profileはこれがあります:

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

これは、使用可能な場合は.bashrcを実行します-環境に$ BASH_VERSIONが存在すると仮定します。これを確認するには、コマンドを入力しecho $BASH_VERSIONます。バージョン番号に関する情報が表示されるはずです。空白にしないでください。


4
これらの指示を理解した後、ターミナルアプリケーションで編集->プロファイルの設定->タイトルとコマンド->コマンドをログインシェルとして実行しました。これをオフにしました。助けてくれてありがとう。
セラ

.profile(したがって.bashrc)がロード/読み取りされるタイミングを明確にできますか?これは、ユーザーがデスクトップセッションにログインしたときに行われたようです。答えは、新しいターミナル/シェルセッションを開始すると発生することを示唆しています(ログインシェル(仮想ターミナルなど)の場合、通常ファイル〜/ .profileが実行されます... "
ハリネズミ

4
通常は、新しいログインシェルを起動するときに実行されます(デスクトップセッションから新しいログインシェルを実行できるため、実際にはデスクトップセッションではありません)。前述したように、デフォルトで実行されますが、~/.bash_profileまたはを作成した場合は実行されません~/.bash_login。のチェックボックスをオンまたはオフにしてテストしEdit -> Profile Preferences -> Title and Command -> "Run command as a login shell、終了してからターミナルを再実行できます。.profileから何かをエコーし​​てテストすることができます。
マーティフライド

@Selahあなたのコメントは実際の答えよりも私を助けてくれました;)コメントをしてくれてありがとう!
アレクス

だから、作成した場合~/.bash_profile~/.bash_login、システム上、それらを維持したいが、それでもたい~/.profileし、そこから~/.bashrc実行され、あなたがあなた自身からそれを供給することができます~/.bash_profile~/.bash_login含む行でsource "$HOME/.profile"。ログインシェルでもlsの色付き出力を返します!
タニウス14年

26

私の場合、単に.bashrcローダーの行が欠落していました.bash_profile

# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
fi

私はそれを手動で追加し、新鮮なログインで機能しました


3
.bash_profile?Ubuntuは.profileデフォルトではなくを使用します.bash_profile
ムル

ubuntuサーバーはしばしば.bashrcをピックアップしません...上記のように動作します... cat .bash_profile [[-s "$ HOME / .bashrc"]] && source "$ HOME / .bashrc"#デフォルトをロードします
Scott Stensland

これで解決しました!追加pcreしましたが、bashプロファイルを追加する代わりに上書きしたようです。
シャピロヤアコフ

7

.bash_profilebashシェルの構成を保持します。ターミナルを開くと、最初にからコマンドを読み取って実行します~/.bash_profile。したがって.bash_profile、bashrcに従ってシェルをセットアップするために以下を追加できます。

. ~/.bashrc

あなたの端末は、(それがUbuntuのデフォルトでない)ログインシェルを実行している場合を除き~/.bash_profile読まれることはありません(と、それはUbuntuのデフォルトでは存在しない)
muru

5

$BASH_VERSIONが設定されていない場合は、chshコマンドを使用してシェルをに設定してみてください/bin/bash

12.04 LTSでも同様の問題が発生しましたが、新しいユーザーアカウントではデフォルトのシェルがに設定されて/bin/shおり、これが問題の原因でした。


これが理由でした!
ムリヤ

1

.profileのコメントに対応

〜/ .profile:ログインシェルのコマンドインタープリターによって実行されます。¬11〜/ .bash_profileまたは〜/.bash_login¬10#が存在する場合、このファイルはbash(1)によって読み取られません。

だから場合は、行く~/.bash_profile~/.bash_login exists、それらの代わりに実行されます~/.profile

実行したい場合は~/.bashrc、次の行source ~/.bashrcを追加しますbash_profile


1
私はまったく同じ問題を経験しました。私.bashrc.bash_profileファイルを作成するまでソースを取得していました。そこでsource ~/.bashrc .bash_profileファイルに行を追加しました。
ラシャエ

0

すべてを実行する代わりにEdit -> Profile Preferences -> Title and Command -> "Run a custom command instead of my shell"、カスタムコマンドボックスに書き込みbash、閉じます。次回ターミナルを開くときに、bashが自動的に実行されます。


どのGUIを参照していますか?ノームまたは団結
ニックワナビット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.