web-dev-qa-db-ja.com

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

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

1386
Jed Daniels

あなただけのコマンドを入力する必要があります。

source ~/.bashrc

あるいは、短いバージョンのコマンドを使用することもできます。

. ~/.bashrc
2232
George Hawkins

またはあなたが使用することができます。

exec bash

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

exec commandはシェルを特定のプログラムに置き換えます。この例では、シェルをbashに置き換えます(更新された設定ファイルを使います)。

233
WhoSayIn

補数と対比 2つの最も一般的な回答 . ~/.bashrc および exec bash

両方のソリューションが効果的に~/.bashrcをリ​​ロードしますが、違いがあります:

  • . ~/.bashrcまたはsource ~/.bashrcpreserve現在のシェル

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

    • つまり、シェル変数、シェル機能、シェルオプション、コマンド履歴に関して現在のシェルに加えられたアドホックな変更は失われます。

ニーズに応じて、どちらか一方のアプローチが好ましい場合があります。


[1] exec bashは、$PATHの前にリストされたディレクトリに存在する場合、理論的には、現在のシェルを起動したものとは異なるdifferentbash実行可能ファイルを実行できます。特殊変数$BASHには常に現在のシェルを開始した実行可能ファイルの完全パスが含まれているため、exec "$BASH"same実行可能ファイルを使用することが保証されます。
"..."の周りの$BASHに関するメモ:二重引用符は、Bashによる解釈なしに、変数値がそのまま使用されることを保証します。値にスペースや他のシェルメタキャラクターが埋め込まれていない場合(この場合はそうではありません)、二重引用符を厳密に使用する必要はありませんが、それらを使用するのは良い習慣です。

109
mklement0

誰かが間違った英語を追加するように私の答えを編集しましたが、これは元のもので、受け入れられた答えより劣っていました。

. .bashrc
46
Randy Proctor

あなたの環境に応じて、ただタイプする

bash

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

18
James

これにより、ない「source〜/ .bashrc」と入力する必要さえあります:

bashrcファイルを含める:

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

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

16
Roy Lin
10
Geoffrey Hale

環境によっては、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にあるパスやスクリプトがすべて読み込まれます。

5
karolus

私にとって、PATHを変更したときの動作は次のとおりです。exec "$BASH" --login

3
Cecília Regina

私は私のvultrクラウドベースのサーバーをセットアップするためにeasyengineを使いました。
私のbashファイルは/etc/bash.bashrcにあります。

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

更新

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

Sudo特権を持つユーザーを作成し、代わりにこのユーザー名としてログインするのが最善です。
これにより、.profileファイルや.bashrcファイルなど、設定用のディレクトリが作成されます。
https://linuxize.com/post/how-to-create-a-Sudo-user-on-ubuntu/

それでは、~/.bashrcファイルを編集(そして「ソース」)します。

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

3
SherylHohman

タイプ:

source ~/.bashrc

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

. ~/.bashrc

2
jwismar

これも動作します。

cd ~
source .bashrc
1
kirti

私はmsysgitで次のコマンドを使用

. ~/.bashrc

の短いバージョン

source ~/.bashrc
1
Sojan V Jose

純粋なexec bashコマンドは環境変数を保存するので、空の環境でbashを実行するにはexec -c bashを使用する必要があります。

たとえば、bashにログインし、export A=1の場合はexec bashA == 1にログインします。

exec -cl bashの場合、Aは空です。

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

1
CatDog

対話型シェルを想定し、現在のコマンド履歴を保存し、/ etc/profile(/ etc/bashrcを含む環境データをロードし、Mac OS Xでは/etc/paths.d/に定義されているパスを次のようにロードします) path_helper)、コマンド履歴を追加し、login( '-l')オプションを付けてbashを実行します。

history -a && exec bash -l
1
beattidp

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

exec $Shell -l;

1
Jimmy M.G. Lim