実は、具体的には bash
を読むのは .bashrc
(と /etc/bash.bashrc
) です。
(http://linux.die.net/man/1/bash) bash man page (by Brian Fox and Chet Ramey; also info page “Bash Startup Files” ) が権威あるリファレンスです:
ログインシェルではない対話型シェルが起動されると、bash は
~/.bashrc
からコマンドを読み込んで実行します。これは、--norc
オプションを使用することで抑制することができます。bash が非対話的に起動された場合、例えばシェルスクリプトを実行するために bash が非対話的に起動された場合、環境中の変数--rcfile
を探し、そこにあればその値を展開し、展開した値をファイルの名前として読み込んで実行します。Bashは次のコマンドが実行されたかのように振る舞います:if [-n "$BASH_ENV"]; then . "$BASH_ENV"; fi
しかし、変数
~/.bashrc
の値はファイル名の検索には使用されません。
ファイルはシェルコマンドだけです。通常、プロンプトの変更、環境変数の設定、シェルプロシージャの定義に使用されます。伝統的には、この目的のために BASH_ENV
というファイルが使われていますが、PATH
には多くの拡張子があるので、スタートアップファイルに [ bashisms ]&003 を入れたいユーザのために、それ自身のスタートアップファイルが必要です。時々、.profile
とbash
をソースだけにするように設定することもあります。POSIX シェルコマンドの外に出ない限り、どのシェルでも同じ初期化を得ることができます。
これは、.bashrc
が本当に BASH_ENV
である場合に特に価値があります。これを行うには次のようにします:
. .profile
これが非常に複雑である理由の一つは、シェルのスタートアップファイルに出力を生成するものを入れたり、無条件にプロンプトを設定したりすることがあるからです。これは、C プログラムからの .profile
はもちろんのこと、シェルプログラムや言語内での backtick コマンドを実行する際に多くの問題を引き起こします。sh
の起動方法は、出力やプロンプトの設定がOKなファイルとそうでないファイルが1つずつあるように設計されていると思います。従来はインタラクティビティを区別するために、例えばプロンプトが設定されているかどうかを確認するなどのランタイムテストが行われていました。
Bash が対話型ログインシェルとして起動されると、まず /etc/profile ファイルが存在する場合には、/etc/profile からコマンドを読み込んで実行します。そのファイルを読み込んだ後、~/.bash_profile, ~/.bash_login, ~/.profile の順に探し、最初に存在して読めるものからコマンドを読み込んで実行します。
ログインシェルが終了すると、Bash は ~/.bash_logout ファイルが存在すれば、そのファイルからコマンドを読み込んで実行します。これは –norc オプションを使うことで抑制できます。rcfile file オプションは、Bash が ~/.bashrc の代わりにファイルからコマンドを読み込んで実行するように強制します。 http://en.wikipedia.org/wiki/Bash(Unixshell)
いくつかのコツとヒントがあります: http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html
プロンプトに今日の日付とホスト名を表示できるように設定してみましょう:
PS1="\d \h $ "
これにはシェルのための様々な “初期化 "コマンドが含まれているはずです:
alias ll='ls -l'
)