Is there a way to completely restart Bash and reload .bashrc and .profile and the like? I'd like to make sure my changes worked out properly after editing these files.
- 716
- 7
- 12
- 38,686
- 85
- 220
- 311
4 Answers
Have it replace itself with itself.
exec bash -l
Note that this won't affect things such as the cwd or exported variables.
- 44,857
- 7
- 93
- 100
-
Nice, but I'd especially like to do this in order to check and see if my `PATH` is being set as I want or my `PS1`, etc. – Naftuli Kay Oct 16 '11 at 22:35
-
1Take out the `exec` and you get a shell that sources the files that you want. Then just `exit` when you are done checking. – Arcege Oct 17 '11 at 00:20
-
@TK: Any variables you *assign* will take precedence over the ones left over from the previous shell. – Ignacio Vazquez-Abrams Oct 17 '11 at 03:23
-
So this will work for changing my Bash prompt? Ie, it'll reload my bash prompt each time I run it? – Naftuli Kay Oct 17 '11 at 03:35
-
As long as you're setting `$PS1` in bash's startup files, yes. – Ignacio Vazquez-Abrams Oct 17 '11 at 03:40
-
1On my screen in Firefox, l (the letter ell) and 1 (the numeral one) look similar. This is bash dash ell, not bash dash one. – Elliptical view Nov 22 '17 at 22:48
-
@Elipticalview: https://fonts.google.com/specimen/Inconsolata – Ignacio Vazquez-Abrams Nov 22 '17 at 22:50
-
2It would be nice if the answer included what the `-l` does to save time looking it up. – Dan Nissenbaum May 30 '20 at 00:39
I urgently suggest to log in on a separate window/screen. This way you still have a working session if something goes wrong with your changes to startup files. Also you are sure to have a clean environment.
Reason: I saw too many people locking themselves out of a system because of a simple typo in their .profile (or such).
- 2,659
- 18
- 15
-
+10, a clean shell where you can change edits is essential. – Sardathrion - against SE abuse Oct 17 '11 at 13:17
-
If your goal is simply to read the modified files again, you don't have to restart it. You can simply source it.
source filename
or
. filename # notice the dot
Note that this won't give you a "clean state" in a sense that it won't unset any set variables or defined functions...
- 19,673
- 28
- 87
- 128
su -l yourOwnUserName
Will open a fresh shell for yourOwnUserName user with all the settings re-loaded. This is shell-independent, as it refers to system settings, not your specific shell. It also loads some system-wide settings that bash -l does not (like user groups).
- 38,754
- 9
- 94
- 102
-
1important note: "a fresh shell" here means a shell within your existing shell, so you are only nesting shells, not replacing your original one. The accepted answer does that properly. – underscore_d Sep 24 '15 at 00:40