Start your command with a space and it won't be included in the history.
Be aware that this does require the environment variable $HISTCONTROL
to be set.
Check that the following command returns ignorespace
or
ignoreboth
#> echo $HISTCONTROL
To add the environment variable if missing, the following line can be
added to the bash profile. E.g. %HOME/.bashrc
export HISTCONTROL=ignorespace
After sourcing the profile again space prefixed commands will not be written to $HISTFILE
In any given Bash session, set the history file to /dev/null by typing:
export HISTFILE=/dev/null
Note that, as pointed out in the comments, this will not write any commands in that session to the history!
Just don't mess with your system administrator's hard work, please ;)
Doodad's solution is more elegant. Simply unset the variable: unset HISTFILE
(thanks!)
echo "discreet";history -d $(history 1)
An extension of @John Doe & @user3270492's answer. But, this seems to work for me.
<your_secret_command>; history -d $((HISTCMD-1))
You should not see the entry of the command in your history.
Here's the explanation..
The 'history -d' deletes the mentioned entry from the history.
The HISTCMD stores the command_number of the one to be executed next. So, (HISTCMD-1) refers to the last executed command.
You can start your session with
export HISTFILE=/dev/null ;history -d $(history 1)
then proceed with your sneaky doings. Setting the histfile to /dev/null
will be logged to the history file, yet this entry will be readily deleted and no traces (at least in the history file) will be shown.
Also, this is non-permanent.
You might consider using a shell without history, like perhaps
/bin/sh << END
your commands without history
END
(perhaps /bin/dash
or /bin/sash
could be more appropriate than /bin/sh
)
or even better use the batch utility e.g
batch << EOB
your commands
EOB
The history would then contain sh
or batch
which is not very meaningful
If you are using zsh you can run:
setopt histignorespace
After this is set, each command starting with a space will be excluded from history.
You can use aliases in .zshrc
to turn this on/off:
# Toggle ignore-space. Useful when entering passwords.
alias history-ignore-space-on='\
setopt hist_ignore_space;\
echo "Commands starting with space are now EXCLUDED from history."'
alias history-ignore-space-off='\
unsetopt hist_ignore_space;\
echo "Commands starting with space are now ADDED to history."'
As mentioned by Doodad in comments, unset HISTFILE
does this nicely, but in case you also want to also delete some history, do echo $HISTFILE
to get the history file location (usually ~/.bash_history
), unset HISTFILE
, and edit ~/.bash_history
(or whatever HISTFILE
was - of course it's now unset
so you can't read it).
$ echo $HISTFILE # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history # Or your preferred editor
Then you've edited your history, and the fact that you edited it!
You can also use the following command:
echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')
I think it's a very portable command.
There are several ways you can achieve this. This sets the size of the history file to 0:
export HISTFILESIZE=0
This sets the history file to /dev/null
, effectively disabling it:
export HISTFILE=/dev/null
For individual commands, you can prefix the command with a space and it won't be saved in the history file. Note that this requires you have the ignorespace
value included in the $HISTCONTROL
environment variable (man bash and search for ignorespace
for more details).
This is handy if you want to erase all the history, including the fact that you erased all the history!
rm .bash_history;export HISTFILE=/dev/null;exit
You just need to run:
$ set +o history
To see more, run:
$ man set
This command might come in handy. This will not record the command that is executed
history -d $((HISTCMD-1)) && <Your Command Here>
Source: Stackoverflow.com