假设我使用zsh运行了一个命令
echo "mysecret" > file
我可以轻松地使用命令fc -l
打印历史记录,包括条目编号:
但是我如何轻松地从历史记录中删除一个条目呢? 在man zshbuiltins中我找不到对应的段落。1 echo "mysecret" >| file
假设我使用zsh运行了一个命令
echo "mysecret" > file
我可以轻松地使用命令fc -l
打印历史记录,包括条目编号:
但是我如何轻松地从历史记录中删除一个条目呢? 在man zshbuiltins中我找不到对应的段落。1 echo "mysecret" >| file
LC_ALL=C sed -i '' '/porn/d' $HISTFILE
LC_ALL=C sed -i '/porn/d' $HISTFILE
这将从您的$HISTFILE中删除所有与“porn”匹配的行。sed -i'' '/S3_SECRET/d' $HISTFILE
。这在Linux上不起作用。https://dev59.com/n2025IYBdhLWcg3w960W - Tim DigginsLC_ALL=C sed -i '' '/S3_SECRET/d' $HISTFILE
。参考链接:https://dev59.com/iWgu5IYBdhLWcg3wfHE_ - Tim Digginssource .zshrc
。 - MickGe我不知道有没有一种优雅的方法来做这件事情,但在类似的情况下,我通常会退出(让zsh清空其缓冲区并将我的历史记录写入文件),然后登录,并 手动编辑 ~/.zsh_history
文件,删除“危险”的行。
HISTFILE=/dev/null
来避免加载历史文件,或者使用另一个shell。如果zsh
是登录shell,则登录并执行sh
,然后编辑~/.zhistory
。 - gnucchi~/.zsh_history
中删除命令,然后重新启动zsh。 - Ferris如果您在zsh中使用HIST_IGNORE_SPACE选项,您可以在命令前面添加一个空格" ",这样它们就不会被记录在历史文件中。如果您有常用的秘密命令,您可以执行类似以下操作:alias hiddencommand=' hiddencommand'。
~/.zshrc
文件中添加 setopt histignorespace
。该命令的作用是忽略历史命令前的空格。 - Tim Abellhistignorespace
。非常有用! - Matteo Gaggiano这个函数可以从你的Zsh历史记录中删除任何一行,无需询问:
# Accepts one history line number as argument.
# Use `dc -1` to remove the last line.
dc () {
# Prevent the specified history line from being
# saved.
local HISTORY_IGNORE="${(b)$(fc -ln $1 $1)}"
# Write out the history to file, excluding lines that
# match `$HISTORY_IGNORE`.
fc -W
# Dispose of the current history and read the new
# history from file.
fc -p $HISTFILE $HISTSIZE $SAVEHIST
# TA-DA!
print "Deleted '$HISTORY_IGNORE' from history."
}
dc
命令被写入历史记录,可以在您的~/.zshrc
文件中添加以下内容:zshaddhistory() {
[[ $1 != 'dc '* ]]
}
我现在已经发布了一个更全面的解决方案作为插件:https://github.com/marlonrichert/zsh-hist
简而言之:
vi $HISTFILE
更多细节:
运行 vi $HISTFILE
SHIFT + g — 跳到结尾
dd — 删除行
:wq — 保存并退出
重新加载会话或打开新标签页以查看更改
history
# 这将列出 .bash_history 文件中所有命令及其行号 ...
987 cd
988 ssh x@127.0.0.1
990 exit
991 cd
2- 选择您想要删除的CMD行号
history -d 988
注意:如果您想要删除最后3个CMD,只需从底部选择第三行编号,例如:988,并连续重复3次CMD history -d 988
。