source .bashrc 等でシェルの動作確認するのはやめてほしい
source コマンドを使用したシェルの設定確認はやめてほしいです.
代わりに,
exec $SHELL -l
を使用してください.
どうして
.bashrc, .profile, .bash_profile などのシェル設定ファイルやPATH/環境変数の設定を確認する際に, source コマンド(e.g. source .bashrc) を利用するのはおすすめできません.
既に読み込まれた設定が残っているため, 設定が正しく反映されているかどうかや, 設定の参照状況や優先順位を確認することが難しくなるからです.
「source コマンドでパスが通ったのが確認できたのでOKだ!」って言って「OS再起動したら使えなくなったんですけど...」なんてことをよく観測するのです.
そのため, シェルを新たに起動する exec $SHELL -l の使用を強く, 強く推奨します.
-l オプションは, ログインシェルとしてシェルを起動するためのオプションです.
通常のログインシェルの初期化手順を踏むようになり, 環境変数や設定ファイルが新たに読み込まれるため, source コマンドを使用した場合と異なり, 正確な設定の適用状況を確認できるようになります.
言わずもがなですが, $SHELL はデフォルトのシェルを設定する環境変数です.
$ echo $SHELL
/bin/bash
おまけ
環境変数もクリアするには
exec env - $SHELL -l
のように, env - も指定すると環境変数もクリアできます.
デモ
# 環境変数を設定してみます
$ export HOGE=FUGA
# 確認してみます
$ echo $HOGE
FUGA
# シェルを再起動してみます
$ exec $SHELL -l
# 環境変数を確認します
$ echo $HOGE
FUGA
# env - を付加してみます
$ exec env - $SHELL -l
# 環境変数がクリアされています!
$ echo $HOGE
# $HOME も消えて, ホームディレクトリにいるのに面白いことになっていますね.
$ echo $HOME
$ cd
bash: cd: HOME not set
$ pwd
/home/ubuntu
# (おまけ)環境変数を一覧してみます
$ printenv
PWD=/home/ubuntu
SHLVL=1
PS1=(省略)
_=/bin/printenv
※ $TERM 周りも消えるので, シェルの設定等によってはカーソル移動やテキスト入力もままならなくなる場合もあります. 必要に応じて賢く使ってみてください. 私はあんまり使いません.(え?)
.profile が既にある環境に .bash_profile を作成しないで
Ubuntu も最近のバージョン(22くらい?)では .bash_profile ではなく .profile がデフォルトで設置されるようになりましたよね.
詳細はドキュメントなり漁って欲しいんですが,
~/.bash_profile => ~/.bash_login => ~/.profile の順で排他的に読み込まれるので, ~/.bash_profile を単純設置してはいけないんです.
で, 中を読むと .profile が .bashrc を読み込んでいるので, .bash_profile を単純設置するとそれが優先かつ排他で読み込まれるので .bashrc も読み込まれず壊れる, みたいなことが起こるわけです.
余談ですが, 最近の Ubuntu は ~/.bashrc で alias ll='ls -alF' のようなエイリアスがデフォルトで登録されているので, 他者がセットアップしたサーバーで ll を叩いたときに「llが無い...なんかおかしいな」という感じでよく気づきます.
Discussion