2009-09-30 15:54:44 +0000 2009-09-30 15:54:44 +0000
106
106

.bashrcファイルとは何ですか?

起動時のUnixシェルは、.bashrcファイルを読み込んで、そこに書かれたコマンドを実行します。このファイルは何で、何を実行しているのでしょうか?

回答 (3)

69
69
69
2009-09-30 15:57:31 +0000

実は、具体的には 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 を入れたいユーザのために、それ自身のスタートアップファイルが必要です。時々、.profilebashをソースだけにするように設定することもあります。POSIX シェルコマンドの外に出ない限り、どのシェルでも同じ初期化を得ることができます。

これは、.bashrc が本当に BASH_ENV である場合に特に価値があります。これを行うには次のようにします:

. .profile

これが非常に複雑である理由の一つは、シェルのスタートアップファイルに出力を生成するものを入れたり、無条件にプロンプトを設定したりすることがあるからです。これは、C プログラムからの .profile はもちろんのこと、シェルプログラムや言語内での backtick コマンドを実行する際に多くの問題を引き起こします。shの起動方法は、出力やプロンプトの設定がOKなファイルとそうでないファイルが1つずつあるように設計されていると思います。従来はインタラクティビティを区別するために、例えばプロンプトが設定されているかどうかを確認するなどのランタイムテストが行われていました。

12
12
12
2009-09-30 15:56:30 +0000

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 $ "
10
10
10
2009-09-30 15:56:46 +0000

これにはシェルのための様々な “初期化 "コマンドが含まれているはずです:

  • 便利なエイリアスの作成 (例: alias ll='ls -l')
  • PATH にディレクトリを追加する。