bashの設定ファイル
bashは、いつ・どんな風に設定ファイルを読み込んで、設定されるのだろうか?結構悩んでしまった。調べてみた。
- 日本語表示の設定などは、bashでなく、ターミナル側の設定なのだろうか?
# ターミナルのタブやウィンドウを開いた時(ログインした時)、sshでログインした時、読み込まれる /etc/profile # ログイン後にbashコマンドを起動した時、読み込まれる # /etc/profileのスクリプトによって、読み込まれる設定になっている /etc/bashrc # ターミナルのタブやウィンドウを開いた時(ログインした時)、sshでログインした時、読み込まれる # 左側のファイルが存在しない時、右側のファイルが読み込まれる ~/.bash_profile || ~/.bash_login || ~/.profile # ログイン後にbashコマンドを起動した時、suでユーザーを変更した時、読み込まれる ~/.bashrc
- つまり、~/.bashrcだけが、ログイン後にbashコマンドで起動した時、suでユーザーを変更した時、に読み込まれる。
- それ以外は、ログイン時に読み込まれる。
- 今のところ、どちらも同じ設定で問題ない。
# ---------- ~/.bash_profile ---------- if [ -f ~/.bashrc ]; then . ~/.bashrc fi
- ちなみに、/etc ディレクトリの設定ファイルは、以下のようになっていた。(コメントを追記した)
# ---------- /etc/profile ---------- # System-wide .profile for sh(1) # $ echo `/usr/libexec/path_helper -s`を試してみると、以下のように展開された # PATH="/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin"; export PATH; if [ -x /usr/libexec/path_helper ]; then eval `/usr/libexec/path_helper -s` fi # 変数BASH-noが、"no"でなければ... # 読み取り可能なら、/etc/bashrcを読む if [ "${BASH-no}" != "no" ]; then [ -r /etc/bashrc ] && . /etc/bashrc fi
# ---------- /etc/bashrc ---------- # System-wide .bashrc file for interactive bash(1) shells. # プロンプト文字列が設定されていなければ... # bashが対話モード(ターミナルの中で)で起動している場合、$PS1にはデフォルト値"\s-\v\$ "が設定されている。 # bashが非対話モード(シェルスクリプトの中で)で起動している場合、$PS1には何も設定されていない。 # つまり、非対話モード(シェルスクリプトの中で)で起動している場合、何もせずに戻るのだ。 if [ -z "$PS1" ]; then return fi # プロンプト文字列を設定する PS1='\h:\W \u\$ ' # Make bash check its window size after a process completes # 端末の画面サイズを自動認識する shopt -s checkwinsize