When I make some changes to the shell/bash behavior, such as setting up an alias, is there a quick command to reinitialize the terminal window instead of closing and opening a new window?
8 Answers
Some Addition i found in the manpage from the reset/tset command
tset reset terminal intialization
command: reset
Tset initializes terminals. Tset first determines the type of terminal that you are using. This determination is done as follows, using the first terminal type found.
an advantage seems to be, that it's independent from the used shell. also works with fish here.
So to reinitialize any terminal just do-
$ tset
OR
$ reset
-
4Unfortunately this is also wrong. It does not reset existing environment variables. – isarandi Mar 28 '19 at 07:25
-
1I think the full answer would be
tput reset && source ~/.profile
. – Mikko Rantalainen Oct 20 '21 at 10:28 -
An additional option to the exec bash
is that if you changed your .profile
(or .bash_profile
), you can do
$ exec bash --login
That will read your profile again as well. It wouldn't hurt to add the -i
option as well to explicitly tell bash that this is an interactive shell, but it can normally figure that out for itself.

- 1,679

- 147
-
-
2Unfortunately wrong as well. Already set environment variables are still there and aren't reset. – isarandi Mar 28 '19 at 07:26
-
3@ArmenSanoyan but that would create a new chile process, with the shell calling
bash --login
as its parent. Usingexec bash --login
will replace the current shell, as explained inman bash
– hashlash Dec 19 '20 at 07:04 -
@isarandi I've found that using
exec -c bash --login
, the command will be executed with an empty environment. But it seems that some important env vars are not reinitialized, which makes my~/.bashrc
not executed. I think the problem lies in how the initial env vars passed to the~/.profile
script – hashlash Dec 19 '20 at 08:09 -
@ArmenSanoyan: Without
exec
, the originalbash
stays running as the parent of this process, and hitting control-D in the new shell will exit back to that shell. – Peter Cordes Jun 16 '21 at 10:58 -
@PeterCordes Sure, but are there any practical drawbacks to that? For all intents and purposes, we are in a "new shell", even if it is running in the old one – information_interchange Jul 21 '21 at 14:47
-
1@information_interchange: the old
bash
is still sitting around in the process list (and waste a few MiB of RAM, which is trivial these days on desktops). And when you eventuallyexit
(or control-d) out of that shell much later, the terminal window / tab won't close and you'll be wondering if it didn't work. – Peter Cordes Jul 21 '21 at 17:06 -
exec -c bash --login
gets me in a weird colorless shell that for some reason also explains me how the sudo command works. Sourcing .profile or .bashrc does nothing afterwards. – Mark Jeronimus Mar 02 '23 at 15:12
Use exec sudo --login --user $USER
.
If you also want the previously entered commands to disapper (full reset of the terminal), combine it with reset
as reset; exec sudo --login --user $USER
.
To keep the current working directory as well, use the following function:
reinit(){
reset
exec sudo --login --user "$USER" /bin/sh -c "cd '$PWD'; exec '$SHELL' -l"
}
There are many answers around the web but most don't actually work. Easy way to test is to set export SOMEVAR=42
then execute the supposedly resetting command and do echo $SOMEVAR
. If it's 42, the environment was not reset.
There is also exec -c bash -l
or exec env -i bash -l
, but these are broken, somehow the $HOME variable is not set after this.

- 387
- 3
- 10
-
To keep the current directory as well:
exec sudo --login --user $USER sh -c 'cd '"$PWD"'; bash'
– Martin Valgur Apr 12 '20 at 19:22 -
1Thanks, that's useful. See my edit, which does not assume bash and uses -l to ensure a login shell and uses exec so there are no nested shells. – isarandi Apr 13 '20 at 13:13
-
best answer! Strangely though the PATH is not exactly the same as from a fresh terminal... – brice rebsamen Jul 31 '20 at 00:08
You have to replace the running application/shell with a new instance. E.g. if you are using bash
as your preferred shell type the following line in your command line ($ is the placeholder for the beginning of your command line):
> $ exec bash
The running application/shell is replaced by new instance of bash
like starting from scratch. All your previous modification are gone.
Remark: Do not forget that your terminal application may be reprogrammed. You have to reset your terminal application manually.

- 117,780

- 440
-
2
-
3This answer is also wrong. exec inherits the environment from its predecessor. Hence it does not restore environment variables. Some may be reloaded by running a new bash but those that are not overwritten are not removed. – Stefan Fabian Mar 22 '20 at 18:24
On Ubuntu at least, . ~/.profile
is better than . ~/.bashrc
, because the .profile file also sources the .bashrc file, and it brings in other dirs, such as ~/bin
to your PATH if those dirs exist.

- 9,155
your shell is an executable you can call. So if you're using bash you can call bash
and if you're using something else like zsh you can just enter zsh

- 3,647
-
This was my thought as well, but I am worried that there will be some issues – information_interchange Jul 21 '21 at 14:46
-
this will create another zsh session in an already existing one which is not happening in case of
exec zsh
– Aram Sep 02 '21 at 08:30
source ~/.bashrc
? – crasic Jan 03 '11 at 05:49source
is a specific to bash..
is more standard. Both work the same in bash. – Michael Terry Jan 27 '11 at 18:36