Bash on Windows のショートカット実行で .bash_profile を読み込ませたい
ショートカットはこれ。
自分の場合 C:\Users\ユーザ名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Bash on Ubuntu on Windows.lnk
にインストールされてた。
結論としては ~/.profile
に -f ~/.bashrc && . ~/.bashrc
を書いて BoW のショートカットのパスは C:\Windows\System32\bash.exe ~ --login
(--login
を追加)にすれば無事 ~/.profile
が読み込まれる。
--login
を指定しただけだとコンソールで色が付かなくなるが、なぜかというと
~/.bashrc
で環境変数 PS1 を設定してプロンプトに色を付けている~/.bashrc
が読み込まれるのは「対話シェル(-i)」かつ「ログインシェル(–login)で起動されなかった」時のみ *1- BoW をショートカットから起動した時はデフォルトで対話的 *2
- 最初に何もしなくても色が付いていたのはこのため
--login
を指定するとログインシェルになるため自動的には読み込まれない- よって
~/.profile
で~/.bashrc
を読み込んでやる必要がある
ちなみに
Ubuntu 関係なく /etc/profile が読み込まれ、その後に ~/.bash_profile, ~/.bash_login, ~/.profile の順に探索され最初に見つかったファイルが読み込まれます(@kariya_mitsuru ++)。*3.bash_profile
じゃなく .profile
と言ってるのは Ubuntu だとそっち使うらしい。
*1:“When an interactive shell that is not a login shell is started, bash reads and executes commands from /etc/bash.bashrc and ~/.bashrc, if these files exist. This may be inhibited by using the –norc option. The –rcfile file option will force bash to read and execute commands from file instead of /etc/bash.bashrc and ~/.bashrc.” / man 1 bash の INVOCATION より
*2:“An interactive shell is one started without non-option arguments and without the -c option whose standard input and error are both connected to terminals (as determined by isatty(3) ), or one started with the -i option.” / man 1 bash の INVOCATION より
*3:“When bash is invoked as an interactive login shell, or as a non-interactive shell with the –login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable.” / man 1 bash の INVOCATION より