ログアウトして再度ログインせずに.bashrcをリロードするにはどうすればよいですか?


回答:


2638

次のコマンドを入力するだけです。

source ~/.bashrc

または、コマンドの短いバージョンを使用できます。

. ~/.bashrc

88
これは、ログインしてバックアウトすることとは完全に同じではありません。.bashrcに次の行があるとします。export PATH=$PATH:fooその後、に変更しexport PATH=$PATH:barます。ログインすると、バックアウトした場合、唯一のbarPATHになりますが、あなたは何を勧め、あなたがない場合は、両方foobarPATHになります。これを回避する方法を知っていますか?
HighCommander4 2013

7
@ HighCommander4-「bash -l」を実行するのは非常に不十分な方法ですが、実際には新しいサブシェルが作成され、ログアウトすると、「foo」がまだPATHにある外側のシェルに戻ります。PATHだけに関心がある場合は、「PATHの設定を解除」して最初から再構築できますが、.bashrcを取得する前に「PATH = / bin:/ usr / bin」を実行する方が簡単で安全です。ログイン時にPATH変数がどのように構築されるかは、実際にはかなり複雑で、少なくともログイン(「man login」を参照)と/ etc / profile(「man bash」を参照)からの入力を含みます。
ジョージホーキンス

2
@Alexあなたは〜/ .bashrcを〜/ .bash_profileに追加することで自動化できますが、これが良い習慣かどうかはわかりません。
Vivek Gani 2013年

4
.bashrcを開き、エディターの終了後にそれを再ロードするエイリアス(〜/ .bashrcまたは〜/ .bash_aliasesに保存できる)を作成することもお勧めします。たとえば、次のように、エイリアスで2つのコマンドを組み合わせることで実行できます(vimが優先エディターである場合、それ以外の場合は別のものに交換します)alias editbashrc='vim ~/.bashrc; source ~/.bashrc'。これにより、カスタムエイリアスを使用している場合は、編集後にリロードについて考える必要がないため、編集がはるかにスムーズになります。
Samuel Lampa 14年

6
現在の端末のみに影響します。
matepal297 2015年

284

または、次のように使用できます。

exec bash

これは同じことを行い、覚えやすくなります(少なくとも私にとって)。

このexecコマンドは、指定されたコマンドラインを実行することにより、シェルプロセスを完全に置き換えます。この例では、現在のシェルが新しいインスタンスbash(更新された構成ファイル)で置き換えられます。


13
source .bashrcコマンドとの違いを説明してもらえますexec bashか?
muradin 2014年

18
@muradin source、現在のシェルで引数として渡されたファイルのコンテンツを実行する組み込みシェルコマンドです。したがって、あなたの例では、現在のシェルで.bashrcファイルを実行します。そして、execコマンドはシェルを特定のプログラムに置き換えます。例では、シェルをbashに置き換えます(更新された構成ファイルを使用)
WhoSayIn

3
私の非常に特殊な状況では、これは完全に揺るぎました。私のDockerfileは、.bashrcを変更するインストールスクリプトを実行します。次に、リロードする必要があり. ~/.bashrcますが、dashではなくで実行されるbashため、shoptがないためエラーが発生します。sourceシェルから見つからないため、その解決策も出ています。私はこれを試してみましたが、スムーズに構築されたドッカー画像です!
m59

9
エレガントですが、「同じことをします」は完全に正しくはありません。シェル環境全体source ~/.bashrcを保持します(のソースによって変更される可能性があります~/.bashrc)、exec bash現在のシェルの環境変数のみを保持します(シェル変数、関数、オプションに関する現在のシェルへのアドホックな変更は失われます)。ニーズに応じて、どちらか一方の方法をお勧めします。
mklement0 2016年

12
@SEoF、「bash inception」と言ったとき、私が考えていることを考えているなら、私はあなたが間違っていると言わなければなりません。映画とは異なり、繰り返し行う場合、bashからbashに移行し続けることはありませんexec bash。このexecコマンド、シェルをプログラム(この場合はbash)に置き換えます。したがって、ターミナルには常にbashのインスタンスが1つ存在します。
ジョンレッド

121

最も人気のある2つの回答を補完および対比するため、. ~/.bashrcおよびexec bash

どちらのソリューションも効果的にリロードしますが~/.bashrc、違いがあります。

  • . ~/.bashrcまたは現在のシェルsource ~/.bashrc保持します

    • リロードこと変更を除いて~/.bashrc現在のシェルに(調達する)になり、現在のシェルとその状態がされている保存環境変数、シェル変数、シェルオプション、シェル関数、コマンドの履歴を含みます、。
  • exec bash、またはより堅牢なexec "$BASH"[1]は現在のシェルを新しいインスタンスに置き換えます。したがって、現在のシェルの環境変数(アドホックで定義したものを含む)のみを保持します

    • 言い換えると、シェル変数、シェル関数、シェルオプション、コマンド履歴に関する現在のシェルへのアドホックな変更はすべて失われます。

ニーズに応じて、どちらか一方の方法をお勧めします。


[1] exec bashは、理論上、現在のシェルを起動した実行可能ファイルとは異なる bash実行可能ファイルを実行する可能性があり$PATHます。特殊変数には$BASH常に現在のシェルを起動した実行可能ファイルの完全パスが含まexec "$BASH"れているため、同じ実行可能ファイルを使用することが保証されています。周囲
の注意:二重引用符は、Bashによる解釈なしで、変数値がそのまま使用されることを保証します。値にスペースや他のシェルメタ文字が埋め込まれていない場合(この場合はありえない)、二重引用符は厳密には必要ありませんが、それらを使用するのはよい習慣です。"..."$BASH


私が質問する前に、あなたは私の質問に答えました。これは知っておくと役に立ちます。多くの場合、1つのセッションに対してCLASSPATHを設定します。
swinefish

したがって、exec "$ BASH"を呼び出した場合でも、.bashrcが設定する変数は、(現在のセッションと同じ実行可能ファイルを使用して)次に開くシェルで見つかりますか?
nitinr708 2017

3
@ nitinr708:はい、exec $BASHソース~/.bashrcになります。そのため、新しいセッションでシェル環境への変更が表示されます。
mklement0 2017

@ Gaming32、私はハイパーリンクされた脚注のアイデアに感謝しますが、実際には機能しませんでした(そして、これと同じくらい短い答えでは、それほど重要ではありません)。
mklement0

44

誰かが私の回答を編集して誤った英語を追加しましたが、これはオリジナルであり、受け入れられた回答よりも劣っています。

. .bashrc

25
これは、現在のディレクトリが実際にホームディレクトリである場合にのみ機能します。以下が機能します。〜/ .bashrc
Brian Showalter

6
これが機能する理由は何ですか?「。.bashrc」を実行すると、実際には何が起こっていますか?ありがとう!
Jed Daniels

54
。「ソース」組み込みコマンドのBASHショートカットです。したがって、「。.bashrc」は、BASHインタープリターの「ソース.bashrc」と同じです。
Brian Showalter、2010年

7
涼しい。ありがとう。今は知りませんでした。
Jed Daniels

2
追加するための編集リクエストを送信したばかりです~/が、トップの回答には両方が表示されており、この回答を冗長として削除する必要があるのかsource ~/.bashrc. ~/.bashrc思います。
Max Ghenis

18

環境に応じて、単に入力

bash

うまくいくかもしれません。


15
ただし、これにより現在のシェル内で新しいシェルが呼び出され、リソースが無駄になります。現在のシェルを新しく呼び出されたシェルに置き換える @WhoSaylnのexecソリューションを使用することをお勧めします。
Bernhard Wagner

ええ、ただソースを使用してください。これは完全に不要であり、迷惑です。
dylnmc 2014


これは、ユーザー特権アクセスが制限される優れたソリューションです。
Tunde Pizzle 2018年

サブプロセスを呼び出すと、付加価値のない複雑なレイヤーが追加されます。
アランベレジン

18

これで、あなたはいないだろうでも「ソース〜/ .bashrcに」と入力する必要があります。

bashrcファイルを含めます。

alias rc="vim ~/.bashrc && source ~/.bashrc"

bashrcを編集するたびに、エイリアス " rc "を実行するだけです


15
. ~/.bashrc

. POSIXが必須の組み込み


代替案

source ~/.bashrc

source.bashではドット/ピリオドの同義語ですが、POSIX shでは同義語ではないため、最大の互換性のためにピリオドを使用してください。

exec bash
  • execコマンドは、シェルを特定のプログラムに置き換えます... – WhoSayIn

2
exec bash現在のシェルの環境を継承します。exec env -i bash(またはexec env -i bash -l現在ログインシェルにいる場合)より近くなります。
chepner

5

環境によっては、SSHセッションを開いたときに.bashrcが自動的にロードされるようにスクリプトを追加することもできます。私は最近、Ubuntuを実行しているサーバーに移行しました。そこには、.bashrcまたは.bash_profileではなく、.profileがデフォルトでロードされています。.bashrcでスクリプトを実行するにはsource ~/.bashrc、セッションが開かれるたびに実行する必要がありましたが、リモートデプロイを実行するときには役に立ちません。

セッションを開くときに.bashrcを自動的にロードするには、これを.profileに追加してみてください。

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

セッションを再度開くと、.bashrcにあるパス/スクリプトが読み込まれます。


これは「.profile」にありますが、機能していません。終了するたびに、手動で行う必要があります。助言がありますか?
ウェインスモールマン

4

easyengineを使用して、vultrクラウドベースのサーバーをセットアップしました。
でbashファイルを見つけました/etc/bash.bashrc

だからsource /etc/bash.bashrc私のためのトリックをしました!

更新

ベアサーバーをセットアップするとき(ubuntu 16.04)、まだユーザー名をセットアップしておらず、ルート経由でログインしているときに、上記の情報を使用できます。

ユーザー(sudo権限付き)を作成し、代わりにこのユーザー名でログインすることをお勧めします。
これにより、.profileや.bashrcファイルなど、設定用のディレクトリが作成されます。
https://linuxize.com/post/how-to-create-a-sudo-user-on-ubuntu/

次に、~/.bashrcファイルを編集して(そして「ソース」として)いきます。

私のサーバーでは、これは/home/your_username/.bashrc
your_username実際に上記で作成した新しいユーザー名であり、今ログインする場所)にありました。


4

exec bashは、新しいシェルを再実行して起動し、現在のシェルを置き換えるのに最適な方法です。答えを追加するだけで、$ SHELLは現在のシェルであるbashを返します。以下を使用することで、bashだけでなく、現在のシェルをリロードします。

exec $SHELL -l;


3

私にとってPATHを変更したときに機能するのは: exec "$BASH" --login


質問はリロードについてです~/.bashrcこれは、--login意志ではない(直接)リロード。ユーザーレベルでは、代わりに再読み込み~/.bash_profile(または~/.bash_loginまたは~/.profile)されます。
mklement0

3

タイプ:

source ~/.bashrc

または、より短い形式で:

. ~/.bashrc


1
この場合も、ホームディレクトリ、より正確に.bashrcはが配置されているディレクトリにいる場合にのみ機能します。これを行うためのより正しい方法は、受け入れられた回答で述べられているように、ですsource ~/.bashrc
John Red

2

msysgitで次のコマンドを使用します

. ~/.bashrc

の短いバージョン

source ~/.bashrc

@jwg受け入れられた答えはです。.bashrc。msysgitのホームディレクトリにいる場合にのみ機能します。
Sojan V Jose 2014

@jwg ok i thin私は、代わりに「source〜/ .bashrc」と入力する必要がないことを述べましたが、代わりに短いバージョンを使用します。
Sojan V Jose 2014

@jwg大丈夫、元の回答に編集として追加しました:)
Sojan V Jose

なぜ冗長な回答@Sojanですか?
nitinr708 2017

@ nitinr708 2014。私はかろうじて覚えています:P。元の答えは後で編集したと思います。
Sojan V Jose 2017

2

対話型シェルを想定しており、現在のコマンド履歴を保持し、/ etc / profileをロードしたいとします(/ etc / bashrcを含む環境データをロードし、Mac OS Xでは/etc/paths.d/で定義されたパスを介してロードしますpath_helper)、コマンド履歴を追加し、ログイン( '-l')オプションを使用してbashのexecを実行します。

history -a && exec bash -l

1

これも機能します。

cd ~
source .bashrc

7
それは行いますが、作業ディレクトリを〜に変更しますが、これは望ましくありません。
アルビン

1
コンテキストを維持していただきありがとうございます@Krinkle
nitinr708

~作業ディレクトリをユーザーのホームディレクトリに変更するように指定する必要がありますか?
ケンリー2018

1

純粋なexec bashコマンドは環境変数を保持するのでexec -c bash、空の環境でbashを実行するために使用する必要があることに気付きました。

たとえば、bashのログイン、およびexport A=1、あなたの場合はexec bashA == 1

あなたはexec -cl bashA空です。

これがあなたの仕事をする最良の方法だと思います。


-2

私は個人的に持っています

alias ..='source ~/.bashrc'

私のbashrcで、「..」を使用してリロードできるようにします。


4
多くの人..がのエイリアスとして使用しているためcd ..、非常に混乱します。
ゴッドファーザー

エイリアスの名前を除いて、良い考えです。alias rehash='source ~/.bashrc'私の選択です。
フランクノッケ2018

リロードシェルとして使用する「_rs」のようなものを使用します。私はエイリアスの最初に_をほとんど使用します。これはjs libs underscorejsまたはlodashに似ています。
ジミーMGリム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.