.bash_profileや.bashrcの変更が反映されない問題(起動時、ログイン時も)

2019.9.21 (土)

source .bash_profileの実行し忘れというのではなく、起動するたびに設定が反映されていないときがありました。なんで?

  1. そもそもパスが通っていないのかもしれない。echo $HOMEとかで確認。
  2. そもそもログインシェルが違うのかもしれない。

一度ログアウトしてからログインするとまた元に戻っていて設定が反映されていないという始末。再起動時も同じ。毎回source .bash_profilesource .bashrcを実行するのは何か変。そもそもデーモン化したアプリとかはどうすんのよ。
ってのは、.bash_profileや.bashrcはログインシェルがbashのときに起動するということなので、ログインシェルとしてbashが起動していないという可能性が大きい。ログインシェルの設定がBashでないか、Bashがログインシェルとして起動されない仕組みになっているかと言うことだと思います。

パスの確認

問題なさそう。

$ echo $HOME
/home/user

ログインシェルの確認

確認したけど、問題なし。

$ tail /etc/passwd
...
user:x:1005:1006::/home/user:/bin/bash

いろいろ調べてみたら、pyenvとかrbenvとかあの辺りの機能はログインシェルが/bin/shっぽいです。

The shell module takes the command name followed by a list of space-delimited arguments. It is almost exactly like the command module but runs the command through a shell (/bin/sh) on the remote node.

http://docs.ansible.com/shell_module.html#synopsis
shellモジュール実行時のシェルは「/bin/sh」であり、ログインシェルは実行していない(.bash_profile等を読み込まない)らしいです。
あんまりちゃんとした解決策がないのだけど、オプションの-lをつけるとbashが実行されるので、

$ /bin/bash -l

これを実行すると治る。でもそれだったら毎回sourceするのと変わらない。