100

Is there a way to temporarily suspend history tracking in bash, so as to enter a sort of "incognito" mode? I'm entering stuff into my terminal that I don't want recorded, sensitive financial info.

136

This should be what you're looking for:

unset HISTFILE

From man bash

If HISTFILE is unset, or if the history file is unwritable, the history is not saved.

Alternatively, if you want to toggle it off and then back on again, it may be easier to use set:

Turn Off

set +o history

Turn on

set -o history
  • 11
    The value of HISTFILE is only checked when bash exits, so the first method doesn't work as is (if you restore the value, the command will be saved). set +o history does work as directed. – Gilles Apr 8 '11 at 20:10
  • 5
    Thanks, excellent. I'll use set +o history and set -o history to toggle back and forth when I'm doing secret stuff ;) – Naftuli Kay Apr 8 '11 at 23:38
  • 1
    unset HISTFILE does not work. set -/+o history works like a charm! thanks – kholofelo Maloma Oct 28 '15 at 13:10
  • 4
    As a tip if you put a space before command (start the command with a space) it will not be recorded in your history, and up/down arrow keys will not show it either. – Mahdi Jul 3 '17 at 16:21
  • 1
    Only unsetting HISTFILE does not erase the command list in memory (try history to see it). If additionally you do HISTSIZE=0 the list gets erased and no command could be stored to file (as no command is remembered). – Isaac Aug 28 '18 at 23:36
30

Using bash, set HISTCONTROL="ignorespace" and precede with space any command you do not wish to be recorded in history. In case you forgot to take any measures, there is also history -d <number> for deleting a specific entry or history -c for clearing the entire command history.

24

Make sure that HISTCONTROL contains ignorespace. You'll probably want to add HISTCONTROL=ignorespace (or HISTCONTROL=ignoredups:ignorespace or something) to your ~/.bashrc. Then any command line that begins with a space is omitted from the history.

Another possibility is to start a new bash session that doesn't save its history.

$ bash
$ unset HISTFILE
$ sooper-sekret-command
$ exit
$ #back in the parent shell
3

There is one simple way to turn off the history, so commands won't be stored in the .bash_history file.

You have to put the whitespace or tab space in front of any command, so that command won't be stored in the history. For example:

$ ls 
print the list of file 
$ history 
ls
history

$  pwd
print the current  working directory 
$ history 
ls
history

The pwd command will not get store in the history, because it has whitespace in the front.

  • This does not work; Bash complains that '-' or '-history', or other hyphenated commands cannot be found. – Samuel A. Falvo II Nov 12 '15 at 21:52
  • 2
    This wont work unless HISTCONTROL="ignorespace" is set as in forcefsck's response – DeveloperChris Mar 21 '16 at 23:37
3

If you need to avoid storing several commands and you still want to use up arrow to access previous commands, use:

$ bash                        # open a new session.
$ unset HISTFILE              # avoid recording commands to file.
$ commands not recorded
.
.
$ exit
$

There are four ways (levels) to control how commands are stored.

  1. The first and simplest is to use ignorespace (or ignoreboth):

    $ HISTCONTROL="ignorespace${HISTCONTROL:+:$HISTCONTROL}"
    

    That will allow to use an space before the commands that you want to avoid being recorded in the memory list of history. And, in consequence, as there is no command recorded in memory that could be sent to file, will also avoid one command to be sent to the file listed in $HISFILE.

  2. Avoid recording commands to the file in $HISTFILE:

    $ unset HISTFILE
    

    If unset, the command history is not saved when a shell exits.

    Null HISTFILE='' and/or set to HISTFILE=/dev/null works to the same effect. Understand that commands are still being recorded to the memory list , try the history command, or the up arrow.

    Warning: if HISTFILE is reset before the shell exists, all what has been recorded in memory could be written to the file anyway.

  3. Avoid recording new commands to the history list in memory. And, as not being in memory, can not be recorded to file.

    $ shopt -ou history              # or set +o history
    

    Re-enable with shopt -os history (or set -o history)

  4. Remove all commands from to the history list in memory:

    $ HISTSIZE=0
    

    All commands get erased (from memory) and therefore nothing could be stored to file, of course, until the variable is set again to some valid numeric value.

  • // , This covers all the answers except the answer from @Ambrose in one convenient page. Way to go, @Isaac. Would you be willing to add a link or two to the docs for this? Pretty sure man history isn't going to cut it for most of us. – Nathan Basanese Oct 15 '18 at 22:46
  • 1
    @NathanBasanese Expanded. Better? – Isaac Oct 17 '18 at 15:58
  • // , Yes! Would I be correct in assuming that these come from the Bash Variables and Shopt Built-in docs? – Nathan Basanese Oct 17 '18 at 16:52
  • // , Also, while I was reading the Bash Variables documentation, I came across HISTIGNORE, which subsumes the function of HISTCONTROL. – Nathan Basanese Oct 17 '18 at 16:55
  • (Assuming you are using linux): What happens if you execute the command LESS=+'/^ *HISTI' man bash (isn't that the "manual pages"?). @NathanBasanese – Isaac Oct 17 '18 at 21:38
1
export HISTFILE=/dev/null 

That is my goto way. Just in case the unset HISTORY/HISTFILE/HISTCONTROL, etc... doesn't work, exporting it to /dev/null has always worked for me.

  • For temporarily suspending history? This didn't work for me as a regular command. Subsequent commands were logged to history. Are you calling this in .bash_profile or a script? GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin16) – Mat Gessel Mar 3 at 22:26

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.