bash / .bash_profile / .bashrcについて「とりあえず」部分を理解する


この記事の目的

bash、.bashrc、.bash_profileについて「とりあえず」理解すること。

環境構築時に、「.bashrc」と「.bash_profile」というファイルを訳も分からず編集しました。

訳もわからないまま突き進むといつかきっとドツボにハマるので、個人的に「ひとまずこれだけ分かれば良いかしら?」という部分をまとめました。

まずは、bashとは?

shellの種類の一つで、shのパワーアップ版のこと。

shellって?

ユーザーがOSカーネルへ指示を出すために使う、CLI(Command Line Interface)のソフトウェア。

「shell」は上記に挙げた機能をもつソフトウェア全般のことを指し、実際に私たちが使用する「shell」には、いくつか種類があるようです。

shellには、2流派+1がある

「+1」というのは、2つの流派の両方の特徴を備えたshellのこと。具体的には、zshがそれに当たります。

流派が同じだと、コマンドや機能も似ていることが多いようです。

shellの種類

  • sh系
    • sh
      • もっとも基本的なshell
      • 他のsh系shellの元
    • bash
      • shの後継
      • GNUプロジェクトの一部で、オープンソースソフトウェア
      • Linuxディストリビューションの多くで標準shellとして同包されている
      • Macでは、Catalinaより前にログインshellとして使われていた
    • ksh
      • 多くのUNIX系OSで標準的に用いられているshellの一つ
      • cshの機能を多く取り入れている
  • csh系
    • csh
      • BSD系UNIXの一つである2BSDを利用するためのshell
      • 対話的に利用する際に便利な機能が多数ある
    • tcsh
      • cshのパワーアップ版
      • 特にユーザーインターフェイスの部分を中心に拡張された
  • zsh
    • sh系とcsh系の良いとことを採用して作られたshell
    • MacではCatalinaから、ログインshellにzshを採用

よく耳にするのはbashzshかな。

...私が使っているshellは何だろう?

自分のshellの種類がわからないときは、このコマンドで確認できる。

  • echo "$SHELL":現在のshell
  • cat /etc/shells:システムにインストールされているshell一覧

その他shell情報を確認するコマンドは、こちらのマイナビニュースの記事が参考になりそうです。

.bash_profile.bashrcは実行タイミングが違う

.bash_profile.bashrcは、どちらもbashの設定です。
では、具体的にどう違うのか?
man bashBash入門を参考にして、2つ説明を要約すると、こんな感じです。

  • .bash_profile
    • 対話的(コマンド入力によって起動)なログインシェルまたは、--loginオプション付きの非対話的シェルとしてbashが起動された時に呼ばれる
    • 実行順番は、/etc/profile~/.bash_profile~/.bash_login~/.profile
    • ログアウト時に~/.bash_logoutがあればこれも実行
  • .bashrc
    • ログインシェルではない非対話型(shell script実行時など)起動の時に実行される

特に重要そうなポイントとして、「.bash_profileはログイン時の1回だけ呼び出される」、「.bashrcはshell起動のたびに呼び出される」と覚えてればいいのかなと思いました。

結局、どう使うのか

Linux: .bashrcと.bash_profileの違いを今度こそ理解するから引用させていただくと、結論はこうです。

そこまで厳密に書かなくても動くのが設定ファイルですし、書き方は人それぞれになると思います。

しかし、少なくとも~/.bashrcで何も出力してはならない、という部分は外さないようにする必要があります。

とりあえずはシンプルに、こう覚えておきましょう。

  • .bash_profile

    • ログイン時に必ず呼ばれるので、出来るだけ余計なものは書かない
    • .bashrcはここで読み込む
  • .bashrc

    • 出力されるようなものは書かない
    • 書くなら、例えばエイリアスやコマンドライン補完の設定
    • .bash_profileに、.bashrcを呼び出す処理を書く必要がある
sample -r ~/.bashrc && . ~/.bashrc

まとめ: bashはshell。.bashrcに出力のある設定を書かなければ一旦はOK

記事によって結論が様々で何が正解なのかわからなかったのですが、「設定ファイルなので、書き方は人の好みによる」という答えで納得しました。

(もし記事中に間違いがあったらコメントいただけると大変ありがたいです...!)

参考サイト