に変更を加えた場合.bashrc
、ログアウトして再度ログインせずにリロードするにはどうすればよいですか?
17 に答える
長い形式のコマンドを入力できます。
source ~/.bashrc
または、コマンドの短いバージョンを使用できます。
. ~/.bashrc
または、次を使用できます。
exec bash
これは同じことを行い、覚えやすくなります(少なくとも私にとっては)。
このexec
コマンドは、指定されたコマンドラインを実行することにより、シェルプロセスを完全に置き換えます。この例では、現在のシェルが何であれ、の新しいインスタンスbash
(更新された構成ファイル)に置き換えられます。
最も人気のある2つの答えを補完し、対比. ~/.bashrc
するために、そしてexec bash
:
どちらのソリューションも効果的にリロード~/.bashrc
しますが、違いがあります。
. ~/.bashrc
または、現在のシェルセッションsource ~/.bashrc
を保持します:~/.bashrc
現在のシェルへのリロード(ソーシング)による変更を除いて、現在のシェルプロセスとその状態は保持されます。これには、環境変数、シェル変数、シェルオプション、シェル関数、およびコマンド履歴が含まれます。
exec bash
、またはより堅牢にexec "$BASH"
[1]は、現在のシェルを新しいインスタンスに置き換えます。したがって、現在のシェルの環境変数(アドホックでセッション中に定義したものを含む)のみを保持します。- 言い換えると、シェル変数、シェル関数、シェルオプション、コマンド履歴に関する現在のシェルへのアドホックな変更はすべて失われます。
ニーズに応じて、いずれかのアプローチが推奨される場合があります。
注:上記は他のシェルにも同様に適用されます。
- デフォルトのシェルが何であれ、
exec
このアプローチを適用するには、次を使用します。exec $SHELL
- 同様に、ソーシングアプローチでは、シェル固有の初期化ファイルの名前を知って指定する必要があります。例
zsh
:. ~/.zshrc
[1]exec bash
は、理論的には、現在のシェルを開始した実行可能ファイルとは異なる 実行可能ファイルを実行する可能性があります。特殊変数には常に現在のシェルを開始した実行可能ファイルのフルパスが含まれているため、同じ実行可能ファイルを使用することが保証されています。
注意:二重引用符は、Bashによる解釈なしで、変数値がそのまま使用されることを保証します。値にスペースやその他のシェルメタ文字が埋め込まれていない場合(この場合は可能性が高い)、厳密には二重引用符は必要ありませんが、それらを使用することは良い習慣です。bash
$PATH
$BASH
exec "$BASH"
"..."
$BASH
誰かが私の答えを編集して間違った英語を追加しましたが、これは元の答えであり、受け入れられた答えより劣っています。
. .bashrc
これにより、「source〜/.bashrc」と入力する必要もありません。
bashrcファイルを含めます。
alias rc="vim ~/.bashrc && source ~/.bashrc"
bashrcを編集するたびに、エイリアス「rc」を実行するだけです。
環境に応じて、入力するだけです
bash
動作する場合もあります。
. ~/.bashrc
代替案
source ~/.bashrc
source
はbashのドット/ピリオドの同義語です.
が、POSIX shにはないため、互換性を最大にするためにピリオドを使用してください。
exec bash
exec
コマンドはシェルを特定のプログラムに置き換えます...– WhoSayIn
exec bash
これは、現在のシェルを置き換えるために新しいシェルを再実行して起動するための優れた方法です。答えに追加するだけで、$SHELL
bashである現在のシェルを返します。以下を使用することで、bashだけでなく、現在のシェルをリロードします。
exec $SHELL -l;
環境によっては.bashrc
、SSHセッションを開いたときに自動的に読み込まれるようにスクリプトを追加することをお勧めします。最近、Ubuntuを実行しているサーバーに移行しましたが、デフォルトではロードされて.profile
いない.bashrc
か.bash_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
ます。
私にとって、PATHを変更したときに機能するのは次のとおりです。exec "$BASH" --login
easyengineを使用して、vultrクラウドベースのサーバーをセットアップしました。
でbashファイルを見つけました/etc/bash.bashrc
。
だからsource /etc/bash.bashrc
私のためのトリックをしました!
アップデート
ベアサーバー(ubuntu 16.04)をセットアップするとき、まだユーザー名をセットアップしておらず、root経由でログインしているときに、上記の情報を使用できます。
(sudo権限を持つ)ユーザーを作成し、代わりにこのユーザー名でログインすることをお勧めします。これにより、前のリソースで説明されているように、ファイルを
含む設定用のディレクトリが作成されます。.profile
.bashrc
次に、ファイルを編集して(およびsource
)作成し~/.bashrc
ます。
私のサーバーでは、これは次の場所にありました/home/your_username/.bashrc
(your_username
実際には、上記で作成した新しいユーザー名で、ログインしてください)
msysgitで次のコマンドを使用します
. ~/.bashrc
の短いバージョン
source ~/.bashrc
インタラクティブシェルを想定しており、現在のコマンド履歴を保持し、/ etc / profile(/ etc / bashrcを含む環境データをロードします。MacOSXでは/etc/paths.d/で定義されたパスをロードします)もロードします。 path_helper)、コマンド履歴を追加し、ログイン('-l')オプションを使用してbashの実行を実行します。
history -a && exec bash -l
純粋なコマンドが環境変数を保持することに気づいたので、空の環境でbashを実行exec bash
するために使用する必要があります。exec -c bash
たとえば、bashにログインし、ログインしているexport A=1
場合exec bash
は、A == 1
。
の場合exec -cl bash
、A
は空です。
これがあなたの仕事をするための最良の方法だと思います。
ログアウトして再度ログインした後のように、シェルが必要なことを理解しています。それを達成するための最良の方法は次のとおりです。
exec env -i HOME="$HOME" "$SHELL" -l
exec
新しいシェルが終了したときにシェルが残らないように、現在のシェルを置き換えます。によって指定されたシェル(通常はbash)が/ (したがって(ubuntuまたは指定されている場合) )を見つけることができるように追加env
して、新しい空の環境を作成します。それらはのおかげで調達されます。でも完全にはわかりません。-i
$HOME
$SHELL
~/.profile
~/.bash_profile
~/.bashrc
-l
これも機能します。
cd ~
source .bashrc
多数のシェルでこのプロセスを自動化するbash_magicと呼ばれる一連のスクリプトを作成しました。bashマジックシェルディレクトリ(デフォルト)のシェルファイルを.bash.d
更新すると、次のプロンプトで自動的に更新が提供されます。したがって、変更を加えたら、Enter
/return
キーを押すだけで、更新が提供されます。