概要
何回も忘れるのでメモ
参考1
http://hacktux.com/bashrc-bash_profile/
http://qiita.com/incep/items/7e5760de0c2c748296aa
シェルの種類
ログインシェル
- OSログインした後に起動するシェルがログインシェル
- GUIでログインするとOSログインのタイミングでログインシェルが起動している(端末クリック無し)。そして端末クリックは対話シェルが起動。
GUIでログインした場合は、内部的にログインシェルが起動していて、端末アイコンなどをクリックしたらそのログインシェルから対話シェルが生成されている、はず。
↓↓↓もログインシェル起動する
- su - [user]
- bash --login
- ssh user@host (ssh接続した先でシェル起動しているので対話シェルも起動している)
- macOS Terminal.app 新規ウインドウ/タブ
- tmux 新規ウインドウ
対話シェル(~/.bash_profileは読み込まない)
- GUIの端末アイコンクリックから生成するシェル
- su [user]
- bash (ssh後など)
- ssh user@host /path/to/command
ログインシェルの設定ファイル読み込み
以下順番で読み込む。CentOSの場合は「.bash_profile」が存在する場合は、他の2つの設定ファイルを無視するみたい。自分のCentOS6.9には無かったので、CentOSの場合そもそもデフォルトでは存在しないみたい。
- /etc/profile
- ~/.bash_profile
- ~/.bash_login (自分のCentOS6.9には無かった)
- ~/.profile (自分のCentOS6.9には無かった)
- ~/.bashrc (対話シェルはこれだけ読み込む)
- /etc/bashrc(~/.bashrc から読み込まれる)
対話シェルの設定ファイル読み込み
- ~/.bashrc (対話シェルはこれだけ読み込む)
- /etc/bashrc(~/.bashrc から読み込まれる)
各設定ファイル
/etc/profile
- ログインシェルが読み込む
-
全ユーザ
の全プロセスで利用したい設定を書く。環境変数は受け継がれるので。 - シェル変数はそのシェルだけ有効なので、全ユーザがログインシェルだけを想定した利用のみ有効にしたい変数はここにシェル変数を書く。そんなのある?
- 環境変数と起動プログラムが記述されてる
~/.bash_profile
- ログインシェルが読み込む
-
各ユーザ
の全プロセスに利用したい設定を書く。環境変数は受け継がれる。 - シェル変数はそのシェルだけのみなので、ログインシェルだけを想定した利用のみ有効にしたい変数はここにシェル変数を書く。そんなのある?
- /.bashrcをよみこんでいる。例えばssh接続の場合、~/.bashrcも同時に読み込む。
$ cat ~/.bash_profile
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/bin
export PATH
~/.bashrc
- 対話シェル、ログインシェル読み込み
- ~/.bash_profileから読み込まれる(ログインシェル起動経由でも読み込まれる)
- 対話シェル起動の場合はこれだけ読み込まれる。
-
各ユーザ
の対話シェルで利用したい設定を書く。環境変数だとこの対話シェルから起動したプロセスにも受け継ぐ。シェル変数はそのプロセスのみ。 - シェル変数はそのシェルだけ有効なので、対話シェルだけを想定した利用のみ有効にしたい変数はここにシェル変数を書く
- がしかし、環境変数で設定してもこの対話シェルで有効になるしこの対話シェルから生成するシェルなど想定しない時がほとんどなので環境変数をここに書く
/etc/bashrc
- 対話シェル、ログインシェル読み込み
-
全ユーザ
の対話シェルで利用したい設定を書く。環境変数だとこの対話シェルから起動したプロセスにも受け継ぐ。シェル変数は対話プロセスのみ。 - シェルを起動した環境ごとのプロンプトが定義。ファイルやディレクトリを新規作成した場合にどのようなパーミッションが設定されるかが記述
存在したら読み込まれるみたい
$ cat ~/.bashrc
# .bashrc
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi
# User specific aliases and functions
参考2
http://itpro.nikkeibp.co.jp/article/Keyword/20070831/280849/
http://oxynotes.com/?p=5418:embed:cite