I need to use a "clean" shell (e.g. bash) under Linux/OSX terminal without any user configuration, but it reads config info from some files (e.g ~/.bashrc) every time it starts. I can modify the file every time I need a "clean" shell, and revert it back when I finished, but is there any easier ways to do this, for example a command?
4 Answers
Running bash --noprofile --norc
still inherited from parent process. Based on a similar question I found that the way I interpreted this question env -i bash --norc --noprofile
was what I would want.
-
9Thanks for the `env -i` tip! This ended up being a little *too* clean for me, since I just wanted to get rid of my custom settings, but I still needed the system-wide settings. This is what I ended up using: `env -i bash --rcfile /etc/profile` – DaoWen Jul 17 '15 at 18:49
-
Great tip. The "env -i" is exactly what I needed. My bash_profile was still being read in despite the "--noprofile --norc" . – Marnix A. van Ammers Jan 24 '17 at 19:55
-
1You didn't need the argument --noprofile as it's only relevant if you have a login shell. – Chad May 21 '17 at 08:07
-
2
-
What's the difference between `env -i bash --norc --noprofile` and `bash --norc --noprofile`? – thc Jun 25 '21 at 07:34
-
1@thc according to man page, `-i, --ignore-environment start with an empty environment` – David Xia Feb 23 '22 at 13:33
-
Note that the usage of `env` in the answer executes the 'system Bash' and not necessarily the one you expect. Using `env -i $(which bash) --norc --noprofile` may result in a better outcome, depending on your setup. Also note that starting a shell without your profile settings may have unintended consequences, such as clearing or truncating your shell history file. – WalterGR Jan 01 '23 at 18:00
You can pass the --noprofile
and --norc
command-line options:
$ bash --noprofile --norc
You will find documentation about these options in the man page.

- 258,201
- 41
- 486
- 479
-
31
-
3
-
1`env -i PATH=/usr/bin:/bin "TERM=$TERM" "HOME=$HOME" bash --noprofile --norc` – Harmen Jun 15 '22 at 13:55
-
1In order to also avoid any configuration files and dirs from the home directory (`.condarc`, `.gitconfig`, etc.) you also need a new temporary empty home directory, as per my [answer below](https://stackoverflow.com/a/70993014/758174). – Pierre D Sep 22 '22 at 16:42
Use --noprofile --norc:
--noprofile
Do not read either the system-wide startup file /etc/profile or any of the personal initializa‐
tion files ~/.bash_profile, ~/.bash_login, or ~/.profile. By default, bash reads these files
when it is invoked as a login shell (see INVOCATION below).
--norc Do not read and execute the system wide initialization file /etc/bash.bashrc and the personal
initialization file ~/.bashrc if the shell is interactive. This option is on by default if the
shell is invoked as sh.
(from the manpage).

- 35,537
- 11
- 75
- 121
It is often desirable to launch an entirely blank bash:
- no environment variables carried from the parent shell;
- an empty home dir without any package-specific configuration files (e.g.
.gitconfig
and.local/...
); - no shell configuration files.
This works for me both on MacOS and Linux:
env -i HOME=$(mktemp -d) bash --noprofile --norc
cd
In that bash shell, the HOME
dir is that test dir just created (change the name if needed), and there are no particular settings. The only environment variables that are set are PWD
, HOME
, and SHLVL
.
Upon starting bash, the PWD
is where we were before, so we need to do that initial cd
.
Example (Linux):
$ env -i HOME=$(mktemp -d) bash --noprofile --norc
bash-5.0$ cd
bash-5.0$ pwd
/tmp/tmp.mwgHRQE1aJ
bash-5.0$ printenv
PWD=/tmp/tmp.mwgHRQE1aJ
HOME=/tmp/tmp.mwgHRQE1aJ
SHLVL=1
OLDPWD=/home/xxxxxxxxxxxxxxxxx
_=/usr/bin/printenv
bash-5.0$

- 24,012
- 7
- 60
- 96