我想执行一些命令,但不想将它们存储在命令历史记录中。这样,没人能在.bash_history
文件中搜索它。
有什么办法可以这样执行bash命令吗?
我想执行一些命令,但不想将它们存储在命令历史记录中。这样,没人能在.bash_history
文件中搜索它。
有什么办法可以这样执行bash命令吗?
Answers:
用空格开始命令,该命令不会包含在历史记录中。
请注意,这确实需要设置环境变量$HISTCONTROL
。
检查以下命令是否返回ignorespace
或
ignoreboth
#> echo $HISTCONTROL
要添加缺少的环境变量,可以将以下行添加到bash配置文件中。例如%HOME/.bashrc
export HISTCONTROL=ignorespace
重新提供配置文件后,将不会将带有空格前缀的命令写入 $HISTFILE
在任何给定的Bash会话中,通过键入以下命令将历史记录文件设置为/ dev / null:
export HISTFILE=/dev/null
请注意,正如注释中指出的那样,这不会将该会话中的任何命令写入历史记录!
请不要惹您系统管理员的辛勤工作;)
Doodad的解决方案更为优雅。只需取消设置变量:(unset HISTFILE
谢谢!)
/dev/null
注销时将权限设置为0600有关的问题。相反,我用了unset HISTFILE
。
@John Doe和@ user3270492答案的扩展。但是,这似乎对我有用。
<your_secret_command>; history -d $((HISTCMD-1))
您不应在历史记录中看到该命令的条目。
这是解释。
'history -d'从历史记录中删除提及的条目。
HISTCMD存储下一个要执行的命令号。因此,(HISTCMD-1)指的是最后执行的命令。
您可能会考虑使用没有历史记录的shell,例如
/bin/sh << END
your commands without history
END
(或许/bin/dash
还是/bin/sash
能比更合适/bin/sh
)
甚至更好地使用批处理实用程序,例如
batch << EOB
your commands
EOB
历史将包含sh
或batch
不是很有意义
您可以通过以下方式开始会话
export HISTFILE=/dev/null ;history -d $(history 1)
然后继续潜行。将histfile设置为/dev/null
会被记录到历史文件中,但是该条目将被轻易删除,并且不会显示任何痕迹(至少在历史文件中)。
而且,这是非永久性的。
正如Doodad在comments中提到的那样,unset HISTFILE
它做得很好,但如果您还想删除一些历史记录,则要echo $HISTFILE
获取历史记录文件的位置(通常是~/.bash_history
)unset HISTFILE
,然后进行编辑~/.bash_history
(或其他任何操作HISTFILE
-当然,现在unset
可以了,所以您可以'没看过)。
$ echo $HISTFILE # E.g. ~/.bash_history
$ unset HISTFILE
$ vi ~/.bash_history # Or your preferred editor
然后,您已经编辑了历史记录,并编辑了它!
unset HISTFILE; echo TEST; history
将为您提供从上至下的命令echo TEST
。尽管在终止会话并再次连接后,历史记录确实没有此条目。所以我会说它有效:)
unset HISTFILE
似乎并没有阻止命令记录在内存的历史记录中,但是它确实阻止了命令被记录在$ HISTFILE文件中。因此,我想您的内存中仍保留有本地历史记录,但是现在不再将其记录在文件中,这可能是您想要的!;)
您还可以使用以下命令:
echo toto; history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')
我认为这是一个非常可移植的命令。
alias forget="history -d $(history | sed -n '$s/\s*\([0-9]*\)\s*.*$/\1/p')"
现在您可以执行以下操作:mysql -uroot -pSecretPassword ; forget
$s
sed和其他内容的含义。function forget() { // put code here // }
如果使用的是zsh,则可以运行:
setopt histignorespace
设置后,每个以空格开头的命令将从历史记录中排除。
您可以使用别名在.zshrc
关闭此开/关:
# 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."'
有几种方法可以实现此目的。这会将历史记录文件的大小设置为0:
export HISTFILESIZE=0
这/dev/null
会将历史记录文件设置为,从而有效地将其禁用:
export HISTFILE=/dev/null
对于单个命令,可以在命令前面加上一个空格,并且不会将其保存在历史记录文件中。请注意,这要求您具有ignorespace
包含在$HISTCONTROL
环境变量中的值(man bash并搜索以ignorespace
获取更多详细信息)。
您只需要运行:
$ set +o history
要查看更多信息,请运行:
$ man set
set -x history
随后添加反向命令,它就可以工作。