14295


.bashrc を書き換えた場合など(ただ、それに限らず)、 bash を再起動したくなる場合があります。

そのような場合において、 bash の再起動は bash の中から行えますか？


CC BY-SA 3.0
2015-08-11T14:20:47.167
14292
2016-04-26T15:28:16.293
754
question
bash
bash の再起動は、 bash の中から行えますか？


再起動ではないので回答になってないかもしれませんがbashrcなどは再起動せずとも読み込めます。

[code]

    $ . ~/.bashrc
    
[/code]

あとこれも再起動ではありませんが新しくログインシェルを起動する事でも読み込めるので、ファイルを変更して確認したいときなどはそうしてます。

[code]

    $ bash -l
    
[/code]


CC BY-SA 3.0
2015-08-11T15:13:06.217
14295
2016-02-03T18:20:12.673
2016-02-03T18:20:12.673
3061
5008
14292
answer


スクリプトをそのまま叩けばいい、というのが @take88 さんの回答でしたが、再起動に近いのは `exec`
を利用することであること、また`-l`の取り扱いについて最近理解が深まったのでまとめておきます。

# `.bashrc` を再度読み込みたい場合

[code]

    exec bash
    
[/code]

なにが起こるか: 現在の bash (のプロセス) を、新たに起動した `bash` のプロセスで置き換える。`.bashrc` が再度読み込まれる。
`.bashrc` は複数回 exec を実行しても問題ないような内容のみを記述するべきであるので、これで基本的に問題がない。

# `.bash_profile` (もしくは `.profile`) を読み込みたい場合

@argus さんもコメントで仰っているように、

[code]

    exec bash -l
    
[/code]

を実行すると、 bash
は「ログインシェルとして起動したときの初期化処理」を行いながらプロセスを再起動できる。その際に、`.bash_profile`が読み込まれる。([参考](https://www.gnu.org/software/bash/manual/html_node/Bash-
Startup-Files.html))

ただ、この初期化処理はただ一回だけ、ログイン時にのみ実行されることを想定した記述がされるべきところであるので、そこは自己責任で行われるべき。

具体的にこの挙動を観測するには、 `.bash_profile` (or, `.profile`) で PATH の追加処理を行っていた場合には、 exec
の度にその追加処理が走ることになっているなどから確認できる。

[code]

    $ echo $PATH
    /home/vagrant/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
    $ exec bash -l
    $ echo $PATH
    /home/vagrant/bin:/home/vagrant/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
    $
    
[/code]

(ただ、 tmux とかだと問答無用でログインシェルとして起動して、 (i) ログイン時 (ii) tmux 起動時 の２回 .profile
は実行されたりしているので、複数回実行されても大丈夫なように、 そもそも .profile は記述するべきなのかもしれない)


CC BY-SA 3.0
2016-04-26T15:28:16.293
24369
2016-04-26T15:28:16.293
754
14292
answer