3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

bash_profileとかって誰が読んでいるんだろうと。

Posted at

時間が空いてしまいましたが、ちょこっと先週調査した内容についてまとめ。

bashの設定ファイルと呼ばれるものとは

aliasとか細々自分のやりたいようにbashを設定したい時に色々やると思うんですよ。
よく使うコマンド系をaliasに貼る、とか
色を変える、だとか
pathを通すとかも含まれるでしょうか。

その方法を調べるとよく

~/.bash_profile
~/.bashrc

がよく名前が上がるかと思います。
あとは上のファイルにちょろっと追記した上で

~/.bash_alias

だとかファイルを追加して分割している方もいらっしゃるようです。

調査の目標と動機

目標

  • ~/.bash_profile
  • ~/.bashrc

って誰やねん、という疑問を解きたい。

動機

なんで~/.bash_profileだとか~/.bashrcという決め打ちのファイルに設定すればいいんだろう?そしてそれ以外のファイルにいいやつは本当にいないんだろうか?
と思ってしまった。とりあえずmacを使っているので、ターミナルを起動した時にどんな感じで動いているのかが軽く分かればいいかな、というライトな気持ちで調べてみた。

時系列順に調査結果報告

とりあえず/に移動して、profile読み出していそうなものをfindかけてみた。
結果

/etc/profile
/etc/bashrc

というやつがいることがわかった。ふむ。
とりあえず/etc/profileを読むと次のようになっていた。

if [ -x /usr/libexec/path_helper ]; then
	eval `/usr/libexec/path_helper -s`
fi

if [ "${BASH-no}" != "no" ]; then
	[ -r /etc/bashrc ] && . /etc/bashrc
fi

とりあえず$Pathの設定と、bashの場合に限って/etc/bashrcを読みに行ってくれるらしい。
なるほど。
ちなみにshにも分類?というか分岐というか、そんなものがあると初めて知った。

  • sh: 元祖BournShell
  • bash, ksh, etc..: B系シェルと呼ばれる。bashがよくいるやつ。
  • csh, tcsh, etc..: C系シェルと呼ばれるやつ。C言語風らしい。
  • zsh: 上記二つのあいのこみたいなやつ?らしい。使ってないからわからん。
  • fish: なんか先輩が使いやすいって言ってた。

/etc/profile にある${BASH-no}ってbashを使用していないときは"no"って入ってて、/etc/bashrcは読み込まれなくなっているっぽい。
まぁどっかで入れているんだろう。

さて
現状まだターミナルを起動した時に~/.profileだとかが読み込まれている気配はない。

というわけで先輩に助言をいただいたところ、なんとSystem系のUtilだし、Linux-sourceみてみたら?とのこと。

ガチンコやないか、、、

.

.

.

profileさえ分かればいいので、linuxのドキュメントをダウンロードしてfindかけて必要そうな内容をつまんでいくことに。
https://github.com/tkmru/linux-insides-ja/blob/master/SysCall/syscall-4.md
こちらにありがたいことにbash関連のコメントが発見された。
要はbash起動時の話なんだけれど、とりあえず起動時にこんなことしているよ、とのこと

  • checks and tries to open /dev/tty;
  • check that shell running in debug mode;
  • parses command line arguments;
  • reads shell environment;
  • loads .bashrc, .profile and other configuration files;
  • and many many more.

なるへそ。
下から2番目の[loads...]あたりが多分私が知りたいことなのだろう。
というわけでbashのソースの中のshell.cに含まれるmainを読みに行きましたとさ。
https://github.com/bminor/bash/blob/master/shell.c

Cやってないから辛いよと思いつつ
プリプロセッサなんてものがいるのかと思いつつ
探してみたところありましたよ。
ファイル名は全て変数に直打ちで

  • profile使わない設定をしていないのであれば必ず
    => /etc/profile
  • sh を使うのであれば
    => ~/.profile
  • bashを使うのであれば上から順に探してあったらそこまで
    => ~/.bash_profile
    => ~/.bash_login
    => ~/.profile

と読みにいくよ

と分岐の流れから完全に書いてありました。
そしてbashrcに関してはprofileでは読みにいっていません。
/etc/bashrcに関しては上でのせた/etc/profileで読みにいくようになっています。
~/.bashrcに関しては、~/.profileにbashrcの設定を読みにいくように追記することが多いようです。
というように両方の設定方針は揃えてあるようですね。

はい。
実際にあのファイル名でないと読みにいってはくれないということがわかったので私は満足。
というわけで備忘でした。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?