执行命令,而不将其保存在历史logging中
我想执行一些命令,但不希望将它们存储在命令历史logging中。 所以没有人能够在.bash_history
文件中search它。
有没有办法如何执行这样的bash命令?
用一个空格开始你的命令,它不会被包含在历史logging中。
请注意,这确实需要设置环境variables$HISTCONTROL
。
-
检查以下命令是否返回
ignorespace
或ignoreboth
#> echo $HISTCONTROL
-
如果缺less环境variables,可以将以下行添加到bashconfiguration文件中。 例如
%HOME/.bashrc
export HISTCONTROL=ignorespace
再次获取configuration文件后,空格前缀命令不会写入$HISTFILE
在任何给定的bash会话中,通过input以下命令将历史文件设置为/ dev / null:
导出HISTFILE = / dev / null
请注意,正如在注释中指出的那样,这不会在该会话中写入任何命令到历史!
请不要惹你的系统pipe理员的辛勤工作;)
[更新] @Doodad的解决scheme更优雅,只需取消设置variables: unset HISTFILE
(谢谢!)
echo "discreet";history -d $(history 1)
@John Doe&@ user3270492的答案的延伸。 但是,这似乎为我工作。
<your_secret_command>; history -d $((HISTCMD-1))
你不应该在历史中看到命令的input。
这里的解释..
“history -d”从历史logging中删除提到的条目。
HISTCMD存储下一个要执行的command_number。 所以,(HISTCMD-1)是指最后执行的命令。
也许可以考虑使用没有历史的shell
/bin/sh << END your commands without history END
(也许/bin/dash
或/bin/sash
比/bin/sh
更合适)
或者甚至更好地使用批处理实用程序
batch << EOB your commands EOB
那么历史将包含sh
或batch
,这不是很有意义
你也可以使用下面的命令:
echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')
我认为这是一个非常便携的命令
正如@Doodad在注释中提到的,未unset HISTFILE
可以很好地完成这项工作,但是如果您还想删除一些历史logging,可以使用echo $HISTFILE
来获取历史文件位置(通常为~/.bash_history
),然后unset HISTFILE
,然后编辑~/.bash_history
(或任何HISTFILE
是 – 当然它现在是未unset
所以你不能读它)。
$ echo $HISTFILE # eg ~/.bash_history $ unset HISTFILE $ vi ~/.bash_history # or your preferred editor
那么你已经编辑了你的历史,以及你编辑它的事实!
有几种方法可以实现这一点。 这将历史文件的大小设置为0:
export HISTFILESIZE=0
这将历史文件设置为/dev/null
,有效地禁用它:
export HISTFILE=/dev/null
对于单个命令,您可以在命令前添加一个空格,而不会保存在历史文件中。 请注意,这需要您具有包含在$HISTCONTROL
环境variables(man bash和searchignorespace
以获取更多详细信息)中的ignorespace
值。
如果你想删除所有的历史logging,包括删除所有历史的事实,这是很方便的!
rm .bash_history;export HISTFILE=/dev/null;exit