Bashの機能——起動ファイルの実行
3798 ワード
login shell
Bashがlogin shellとして呼び出されると、次のファイルのコマンドが順番に読み込まれ、実行されます.
通常、/etc/profileには次のような文があります.
if [ -d /etc/profile.d ]; then
for i in /etc/profile.d/*.sh; do
if [ -r $i ]; then
. $i
fi
done
unset i
fi
だから、/etc/profile.dディレクトリの下の*.shファイルもlogin shell起動時に実行されます
Bashを呼び出すときに-noprofileオプションが使用されている場合、上記のファイルはlogin shell起動時に実行されません.
login shell終了時に実行
非login shell、インタラクティブshell
Bashがインタラクティブshellとして機能し、login shell呼び出しではない場合は、次のファイルのコマンドを読み取り、実行します.
Bashを呼び出すときに-norcオプションが使用されている場合、上記のファイルはインタラクティブshell起動時に実行されます.-rcfile fileオプションを使用して、~/ではなく、インタラクティブshellの起動時に実行するファイルを指定します.bashrc
通常、login shellの起動ファイル~/.bash_profile, ~/.bash_loginと~/.profileには次のような言葉があります.
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
だから-~/.bashrcもlogin shell起動時に実行されます
非対話型shell
非対話的にBashを起動すると(shellスクリプトの実行など)、Bashは環境内で変数BASH_を検索します.ENV、BASH_ENVが存在する場合は拡張され、読み取りおよび実行するファイルとして拡張された値が使用されます.Bashの動作は、次のコマンドを実行するのと同じです.
if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
ただし、PATH変数の値はファイル名の検索には使用されません.
まとめてみます.
インタラクティブシェル
非対話型shell
login shell
/etc/profile, ~/.bash_profile, ~/.bash_login, ~/.profile, ~/.bashrc
/etc/profile, ~/.bash_profile, ~/.bash_login, ~/.profile, BASH_ENV
非login shell
~/.bashrc
BASH_ENV
sh
名前shを使用してBashを呼び出すと、起動ファイルは次のようになります.
インタラクティブシェル
非対話型shell
login shell
/etc/profile, ~/.profile, ENV
起動ファイルがありません
非login shell
ENV
起動ファイルがありません
-noprofileオプションは、このlogin shellの起動ファイル実行起動ファイル実行を禁止するために使用できます.実行後、BashはPOSIXモードに入ります.
bash --posix
インタラクティブシェル
非対話型shell
login shell
ENV
起動ファイルがありません
非login shell
ENV
起動ファイルがありません
リモートshell daemonに呼び出される(rshd,sshd)
bash
sh
~/.bashrc
起動ファイルがありません
バッシュ呼び出し時に有効ユーザ(グループ)IDと実ユーザ(グループ)IDが一致しない場合
起動ファイルがないと実行されます