.bashrcが自動的に実行されないのはなぜですか?


202

.bashrc新しいターミナルウィンドウを開くたびにそれらが読み込まれるように、ファイルにエイリアスコマンドをいくつか配置しました。しかし、これは起こりません。

私は選択する必要がありrun script:、ターミナル>設定>「のMyDefaultTheme」>シェルのprefpaneと追加します。 source .bashrc && clearそれが動作するために...

多くのチュートリアルでは、.bashrcファイルに追加するだけで良いと書かれているため、これは奇妙に思えます。

bashターミナルを使用するときは実行しませんが、他の(デフォルト)の方が好きです(それが何であるかわかりません)。

>>d54c6b47b:~ romeo$

の代わりに:

>>bash$

bashでは、すべてが必要に応じてロードされます。

だから私の質問は、なぜ私の.bashrcファイルが自動的にロードされず、毎回それを呼び出すオプションを追加する必要があるのですか?

また、いくつかのチュートリアルでは、次のようなことをするように指示されました。

$alias la=’ls -la >> ~/.bashrc

エイリアスをmyに書き込む必要がありますが.bashrc、これも機能しません...

私はUNIX初心者なので、気をつけてください。


これはapple.stackexchange.com/questions/7984/…に非常に近いと思います。
-boehj

@boehjは「ロードしていない」と言っています.bashrcが、それはそれについてです。
ヤリケイネン

ここで物事を間違えたらごめんなさい。
boehj

あなたはおそらくcsh(または別のバリアント)の方が好きでしょう。ただし、>>bash$変更できることを知っておく必要があります:)
vol7ron

コマンドでonloadを実行する場合.profileは、ホームディレクトリに作成します
Kolob Canyon

回答:


94

.profileそれをあなたのホームディレクトリからあなたのファイルに置くだけで、次に新しいシェルを起動したとき、または実行した後に動作するはずですsource ~/.profile

このリンクには、起​​動ファイルがシェルによって読み取られてロードされる順序が明記されています:http : //hayne.net/MacDev/Notes/unixFAQ.html#shellStartup


解決策がある(そして、2つのほぼ同一の投稿の最初のものだった)ため、これを受け入れました。
-romeovs

37
ダウン投票。このアドバイスに従わないことをお勧めします。問題は、ターミナルがログインシェルを作成し、Bashログインシェル実行するのはログインスタートアップスクリプトのみであり、ではないこと~/.bashrcです。ただし、.bashrcこれらの2つのファイルは異なる種類のセットアップを実行することを目的としているため、ソリューションは単にログインスタートアップファイルにコンテンツを配置することではありません。代わりに、Bashの標準的なセットアップでは、スクリプトの適切なポイント(通常は最後)で~/.bash_profileソースを取得します~/.bashrc
クリスページ

私はこれがshファイルに入れていると言う他の同一の投稿を見ません
マーク

218

そこに行って、それをしました。私が気付いたのは、OS Xは.bashrcbashの開始時にファイルを読み取らないことです。代わりに、次のファイルを(次の順序で)読み取ります。

  1. /etc/profile
  2. ~/.bash_profile
  3. ~/.bash_login
  4. ~/.profile

Chris Johnsenの有益で有益なコメントも参照してください。

デフォルトでは、ターミナルはシェルを介してシェルを起動し、シェルを/usr/bin/loginログインシェルにします。すべてのプラットフォーム上で(だけでなく、Mac OS Xの)bashが使用していません.bashrcログインシェル(のみのために/etc/profileとの最初の.bash_profile.bash_login.profileそれが存在し、読み取り可能です)。これが「put source ~/.bashrcin your .bash_profile」が標準的なアドバイスである理由です

私は通常、ちょうど私が正常に入れたいもの入れ~/.bashrc~/.profile魔法のように、これまで取り組んできましたが- 。


38
デフォルトでは、ターミナルはシェルを介してシェルを起動し、シェルを/usr/bin/loginログインシェルにします。すべてのプラットフォーム上で(だけでなく、Mac OS Xの)bashが使用していません.bashrcログインシェル(のみのために/etc/profileとの最初の.bash_profile.bash_login.profileそれが存在し、読み取り可能です)。これが、「source ~/.bashrcあなたの」を置くこと.bash_profileが標準的なアドバイスである理由です。
クリスジョンセン

5
Re "私は通常〜/ .bashrcに入れたものを〜/ .profileに入れるだけです":互換性を最大限にするために、Chris Johnsenのアドバイスに従い、非ログインシェルに適用したいものをすべて配置することをお勧めします〜/ .bashrcを追加し、 "source〜/ .bashrc"を〜/ .bash_profileに追加して、ログインシェル用に実行します。そうしないと、サブシェルでは機能しません。ターミナルが非ログインシェルを作成するように変更された場合、またはデフォルトで非ログインシェルを作成するxtermまたは別のターミナルプログラムを使用した場合、または別のOSで同じセットアップ。
クリスページ

4
関連する注意事項として、Mac OS Xでは、〜/ .bashrcで/ etc / bashrcを実行してグローバルな動作を取得することを検討する必要があります。特に、/ etc / bashrcにはコードがあり、各プロンプトで作業ディレクトリを更新します。これにより、ターミナルはプロキシアイコンを表示し、同じディレクトリに新しいターミナルを作成し、再開およびウィンドウグループの作業ディレクトリを復元できます。
クリスページ

私にとっては、.bash_profileから.bashrcを入手することはできませんでした。しかし、.profileから.bashrc / .bash_profileを入手することはできました。
ケンラッセル

2
いい答えですが、少し誤解されています。私はbashの端末負荷を信じる1~/.bash_profile~/.profile~/.bash_login、決してそれらのすべて。3つのファイルを作成して、簡単なテストを実行できます。bashの端子はの好みがあるように見えます~/.bash_profile> ~/.bash_login>を~/.profile。それらのいずれかが存在する場合、優先度の低いものはスキップされます。時にはソースすることをお勧めします理由です~/.profile~/.bash_profile
神経突起

25

私はにすべてをかける~/.bashrcだけsource ~/.bashrcの.profileに。

これにより、画面およびxterm(およびtmuxの推測)セッションは、非ログインセッションのみが実行されるように環境を継承できますが.bashrc、ログインセッション(端末またはiTermなど)は実行のみ.profileです。


1
これが私のアプローチです。この方法で、両方のシステムで動作する.bashrcを維持できます...そして、Mac固有の機能や、作業専用のエイリアス(Macを最も使用する場所など)を.bash_profileファイルに配置できます。
マイケルデュラント

2
.profileいくつかのシェルに共通であり、POSIX互換のshコードのみを含める必要があることに注意してください。ソースの.bashrc場合は、おそらくBash固有のコードが含まれています(.bashrcファイルの存在はBash固有です)。Bash固有の方法で使用している.profileため.bash_profile、の名前を変更することをお勧めします。または、汎用コードを入れ.profileて、.bash_profileそのソース.profileとを作成します.bashrc
クリスページ

19

2つのシナリオがあります。

  1. Linuxを使用している
  2. Mac OS Xを使用しています

どちらの場合も~/.bashrc、端末のシェルが起動したときにロードまたはソースされるプロファイルをソースにしたいです。


リナックス

Linuxでは、~/.profile起動時にシェルで自動的にソースになります。したがって、ターミナルに移動してを入力cd ~; ls -Aすると、ホームディレクトリ(/home/usrname/)にすべてのファイルとディレクトリが表示されます。というファイルが表示され.profileます。これは、ターミナルの起動時に自動的に「ソース」となるファイルです。

エイリアスと関数を追加したい場合~/.bashrc(これは私がしていることです)、(空ではないファイルで~/.profileあるかどうかをチェックするifステートメントを追加して~/.bashrcから、ソースにします)

~/.profileすでにこれを行っているかどうかを確認するには、と入力しnano ~/.profileます。これにより、テキストエディタで開きます(geditを使用していることがわかっている場合は使用でき、使用方法がわかっている場合はvimを使用することもできます)。空のテキストファイルを取得する可能性があります(そうすべきではありません)が、単純に続行する場合。あなたが行表示されない場合はどこかと言うsource ~/.bashrc、その後、(if文の途中で終わりか始めにのような合理的な場所に入れていない)どこかに次の行を入力します。

if [ -s ~/.bashrc ]; then
    source ~/.bashrc;
fi

これ~/.bashrcは、空でないファイル(ifを含む[ -s ~/.bashrc ])であるかどうかをチェックし、そうである場合、それをソースします。ものすごく単純。これで、有効なエイリアス、関数、変数などをに追加できます~/.bashrc


MAC OS X

デフォルトでは、Max OS X sources ~/.bash_profile。物事を追加できるようにするには~/.bashrc(これもまたOS Xで私がしていることです)、Linuxと同じ手順に従います。ターミナルでと入力しcd ~; nano .bash_profileます。という行があるsource ~/.bashrcかどうかを確認し、ない場合は上記のifステートメントを追加します(if [ -s ~/.bashrc ]; then source ~/.bashrc; fi)。


ノート

if文を書くとき(例えば、基本的にすべてのものの間にスペースを残すようにしてくださいif [ -s ~/.bashrc]; then echo "found"; fibeweenスペースがないので、動作しない~/.bashrc]-この思いますインタプリタは一つの単語です)。

ifステートメントの内容をより適切にチェックする方法を理解したい場合は、ターミナルに移動してman \[; を入力します。これにより、基本的にifステートメントの概要がわかります。たとえば、ファイルであるかどうか、およびそれに従って標準出力に出力されるかif [ -f /path/to/file ]; then echo "it's a file"; else echo "not a file"; fiどうかを確認/path/to/fileします。目で見やすく簡単に参照できるように、これも常に参照しています。ファイルテストオペレータ

これがお役に立てば幸いです。このようなことをすべて始めたとき、私がどれほど混乱していたかを覚えています(それほど前ではありません)。それで、あなたの将来のUNIXの努力で幸運を!


Linuxでは.profile、シェルがログインシェルの場合にのみソースされ、そうでない場合.bashrcはソース
-smac89

11

.bash_profileで.profileを調達することにより

echo 'source ~/.profile' >> ~/.bash_profile

1
.bash_profileで.profileを入手するのは素晴らしいことですが、それだけではログインシェルによって.bashrcが実行されることはありません。.profileは.bashrcを既にソースしている必要があり、bash以外のシェルを使用すると問題が発生する可能性があります。ほとんどのMacユーザーは決してそうしませんが、何らかの理由でそうする場合は、これを覚えておいてください。:)
テリーN 14年

@TerryNの発言を拡張するには、必ずからではなく、.bashrcあなたからソースを取得してください。Bash固有であり、他の2つをソースする必要があります。.bash_profile.profile.bash_profile
クリスページ

6

rvm(自動インストーラー、手動編集なし)をインストールした後、それまで~/.bash_loginファイルがなかった場所にそれ自体のファイルを作成したことがわかりました。

ただし、これは私の~/.profileセットアップとエイリアスがロードされなくなったことを意味します!多くのショートカットが消えました。私はそれらが排他的にではなく、連続して実行されると思った:-/

追加した

. ~/.profile 

~/.bash_login期待通りに物事を連鎖させるために。


+1、これは私が持っていた状況です。.bash_loginまたは.bash_profileのいずれかが.profileの実行を妨げることがわかりました...なぜbashが非常に多くの競合するスタートアップファイルを持つ必要があると感じるのかわかりません。
リッチベル

.profileいくつかの異なるシェルに共通であり、POSIX互換のshコードのみを含める必要があります。.bash_profileBash固有であり、Bash固有のコードを含めることができます。一般に、Bashを使用している.bash_profile場合は、スタートアップコードにBashに依存するものが含まれないように注意しない限り、好むはずです。.bash_loginBash固有のコードが含まれているため、作成されたプログラムはおそらくそうでしたが、.profile存在する場合はソースにコードを含める必要がありました。
クリスページ

3

パッティング...

[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm" # Load RVM function

...で~/.bashrc、その後、元~/.bashrcの私に~/.bash_profile インストールされていますターミナルプログラムでは動作しませんでした。

しかし、その後、メニュードロップダウンの[ 編集]> [プロファイル設定]、[ タイトルとコマンド ]タブに移動し、そのページのコマンドセクションから[コマンドをログインシェルとして実行 ]を選択しました

そうすると、新しいターミナルを起動すると、入力したときに目的の結果が表示されます

 type rvm|head -1

すなわち、「rvmは関数です」。それは私がこの変更を行ったことまではしませんでした、そしてそれは私が後に行われた変更のみだ.bash_profile.bashrc、ここで他の回答で説明する変更。


2

まず~/.bashrc、2番目のシェルが呼び出されるたびに実行されるファイル(シェルスクリプトの実行時など)であり~/.profile、ログインごとに呼び出されるファイルであることを教えてください。

したがって. ~/.bashrc~/.profileファイルにコマンドを記述することをお勧めします。このコマンドは、ログインするたびにbashrcファイルを実行します。


.profileがログイン時に実行されると、自動的に.bashrcファイルが実行されます。
アルンラナ

.bashrcはログインごとに間接的に実行されます
arun rana

1
bashrcは、非ログインシェル用です。bash_profile / bash_login / profile /その他、ログインシェル用です。これは、ログインシェルであるものとそうでないもの(たとえば、デスクトップ環境内の端末などのscreen / tmuxセッション)を含む、膨大な量の競合の原因です。必ずしも「2番目のシェル」ではありません。それはシェルエントリの問題です。
ジェイソンサラズ

3
Bashではないシェルを使用したことがある場合、説明したことを実行すると問題が発生する可能性があります。.profileはすべてのシェルに適用され、.bashrcには他のシェルが理解できない言語が含まれている場合があります。.profileの代わりに、書いたものを.bash_profileに入れます。(また、最初に.bash_profileが「ソース.profile」になるようにしてください。)
テリーN 14年

1

リモートサーバー(Digital Ocean)Ubuntu 16.04にrbenvをインストールした後、同じ問題に遭遇しました。

それは何とか作成しました~/.bash_profile~/.bashrcOS Xシステムでも同じです。

そして、Ubuntuは読み取り専用~/.bash_profileになりましたが、そう~/.bashrcではありませんでした。

だから私~/.bash_profileはこれで自分のデータをバックアップしました:

mv ~/.bash_profile ~/.bash_profile.bak

そして、古い名前~/.bashrc~/.bash_profile

mv ~/.bashrc ~/.bash_profile

それは私のために働いた。sshにログインすると、すべてが読み込まれ~/.bashrcます。


0

これが他の人に役立つかもしれない場合...

.bashrc適切なユーザーの適切なファイルを編集していることを確認してください。Vagrantを使用して同様の問題が発生しました。実行した後vagrant ssh.bashrcファイルは実行されていませんでした。解決策は簡単でした。つまり、vagrantはvagrantという名前のユーザーでログインしており、実際には別のユーザーとしてログインしていたと思ったからです。だから、間違った.bashrcファイルを編集していた。正しい.bashrcファイルを編集した後、エイリアスが認識されました。


-1

ところで、ZSHをアクティブにした場合、bashを置き換えます!

したがって、これらの~/.bashrcファイルはすべてロードされません。

~/.zshrc代わりにエイリアスを設定する必要があります。


-2

OSXスタイルのログイン.profileを維持し、通常のbashの動作.bashrcをサポートするには、.bashrcファイルへのシンボリックリンクを提供することにより、通常のnixとOSXを切り替える場合にファイルを使用でき.bashrcます.bash_profile。これを試す前に、このファイルが既に存在していないことを確認してください。しかし、これは私がそれを行う方法です。

ln -s .bashrc .bash_profile

2つの異なるシェル初期化スクリプト間でこのリンクを行うことにより、必要な機能の分離がなくなります。いつか、セッションレベル.bash_profileでの初期化()と、各シェルレベルでの初期化()が必要になります.bashrc
ダン14

-2

/ etc / bashrcは、Macシステムのグローバルプロファイル用です。エイリアスls = "ls -G"をこのファイルの先頭に追加すると、すべてのユーザーがシステム上に色付けされたファイルとフォルダーを持つため、個々のユーザーごとに特別な設定をする必要はありません。また、「sudo su-」とともに、自分からrootになると、余分な頭痛のない色付きのファイルとフォルダーが残っていることに気付くでしょう。

別の楽しいヒント:MacのIterm2を使用する場合、カラープロファイルをインポートすると、この「/ etc / bashrc」オプションを設定した後、カラースキームに従ってファイルとフォルダーのカラーリングがすぐにレンダリングされます。

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