.bashrcと.bash_profileの違い

みなさん、こんにちは。インターン生の@shunkurosakiです。
今回は、.bash_profileと.bashrcの違いについて記事を書いていきます。

インターン中にLangmatchというサービスの開発を進める中で、database.ymlに記述されている内容が、開発者の環境ごとに異なるという場面に遭遇しました。しかも、パスワードが書かれたコードをGITで管理したくありません。

このような場合、データベースの接続情報などを環境変数として.bash_profileに設定することで、解決することができます。

# database.yml

default: &default
  adapter: mysql2
  encoding: utf8
  database: <%= ENV['HOGE_DEVELOPMENT'] %>
  username: <%= ENV['HOGE_USERNAME'] %>
  password: <%= ENV['HOGE_PASSWORD'] %>
  socket: <%= ENV['HOGE_SOCKET'] %>
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export HOGE_USERNAME=root
export HOGE_PASSWORD=hogehoge
export HOGE_SOCKET=/tmp/mysql.sock
export HOGE_DATABASE_NAME_DEVELOP=hoge_development

export PATH="$HOME/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

bash_profileと.bashrcの違い

ユーザーのホームディレクトリの中には、.bash_profile以外にも、.bashrcと言ったファイルが入っています。しかも、.bashrcに.bash_profileと同じ内容を記入しても同じように動作します。それでは、.bash_profileや.bashrcはどのような役割を持っているのでしょか。

.bashとは
bash」(ばっしゅ)はLinuxで用いられる標準のシェル・プログラムです。windowsではコマンドプロンプトが、MacOSではFinderがこれに当たります。シェルとは、ユーザからの操作を受け付けて、与えられた指示をOSの中核部分に伝えるソフトウェアのことを指します。キーボードに打ち込まれた文字を解釈して、対応した機能を実行するようにOSに伝えるのは、シェルのお仕事です。そして、このシェルが複数の処理をまとめて行う場合、シェルスクリプトの中に、複数の動作を書き込みます。

.bash_profileとは
.bash_profileはログイン時だけに実行される設定ファイルです。ログイン時に一度だけ読まれればいいもの(例えば、環境変数など)はこのファイルに書き込むことが一般的です。

.bashrcとは
.bashrcはログイン時に.bash_profileから読み込まれ実行されます。また、別のシェルが起動したときにもその度に実行されます。

つまり、ログイン時に一度だけ実行したいものは.bash_profileに、シェルが起動する度に実行したいものは.bashrcに書き込みます。

基本的なことですが、一つ一つ丁寧に学んでいこうと思います!
それではまた。