

bashが`~/.profile`や`~/.bash_profile`のファイルの変数を読み込みません。  
例えば`.bash_profile`に

[code]

    export x=100
    
[/code]

として

[code]

    echo $x
    
[/code]

としてもxの値が出力されません。  
`/etc/profile`の設定は

[code]

    # System-wide .profile for sh(1)
    
    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
    
[/code]

のようになっています。


CC BY-SA 4.0
2019-08-27T07:19:16.800
57632
2019-12-09T09:33:42.810
2019-12-09T09:17:31.870
32986
35622
question
bash
bashが変数を読み込みません


当時`sh`は起動時に`.profile`を使用していました。

現在`bash`は最初に`.bash_profile`をロードしようとします。 しかし、それが存在しない場合`.profile`をロードします

`bash`が`sh`として起動される場合（たとえば、`/bin/sh`は`/bin/bash`へのリンク）、または`--posix`フラグで起動される場合、`sh`をエミュレートしようとし、`.profile`

そのため、`〜/.bash_profile`を直接使用してみてください


CC BY-SA 4.0
2019-08-28T02:03:48.833
57647
2019-08-28T02:03:48.833
32883
57632
answer


デフォルトでは`~/.profile`や`~/.bash_profile`はログインシェルが起動するときに読まれます。  
`bash -l`や`bash --login`のようにログインシェルとして起動すると希望通りに動作すると思います。


CC BY-SA 4.0
2019-08-28T05:38:14.327
57653
2019-08-28T05:38:14.327
25936
57632
answer


`~/.bash_profile`に記述した環境変数は次の操作で有効になります。

  * ログインしなおす
  * `su -`を実行する ※`su`では有効になりません
  * `source ~/.bash_profile`または`. ~/.bash_profile`を実行する

なお、`~/.bashrc`に記述すればbashが起動されるたびに実行されます。

伽語蓮弥さんの回答のとおり、`~/.profile`や`~/.bash_profile`はログイン時にだけ読み込まれるようです。  
ログイン後のbashは`~/.bashrc`をカレントシェルで実行します。  
※straceでbashを起動して確認した結果です。

私の環境の`~/.bashrc`は`/etc/bashrc`をカレントシェルで実行しています。※.bashrcはデフォルトのままです。

試した環境は次のとおりです。  
CentOS Linux release 8.0.1905 (Core)  
GNU bash, バージョン 4.4.19(1)-release (x86_64-redhat-linux-gnu)


CC BY-SA 4.0
2019-12-09T09:07:46.753
61264
2019-12-09T09:33:42.810
2019-12-09T09:33:42.810
35558
35558
57632
answer