这两个问题解决了如何防止给定命令添加到 shell 历史记录中:
答案集中在用户可以使用的解决方案上为每个命令添加前缀(例如带有空格)。我正在寻找的是一个可以运行一次的命令,这将有效地“冻结“我的历史文件位于 shell 中,直到我稍后使用另一个命令将其解冻。
虽然历史是“冷冻的”:
我希望我的命令能够读从现有的历史文件(例如,以便我可以执行命令搜索
C-r
,例如 和标准自动完成。我想阻止我运行的任何命令被添加到历史记录中
我怎样才能用 zsh 完成这个任务?
答案1
您可以使用fc -p
启动新的历史列表,并fc -P
调用以前的历史列表。经过 plain 后fc -p
,你会得到一个空白的历史记录。您可以传递一个文件名以fc -p
从该文件读取历史记录,因此保存历史记录并立即使用fc -p
.当您调用时,它会将调用前 fromfc -P
的值恢复为。HISTFILE
fc -p
freeze_history () {
fc -A
fc -p $HISTFILE
unset HISTFILE
}
unfreeze_history () {
fc -P
}
不幸的是,历史记录不能直接在内存中编辑,您只能通过从文件中读取来人为地填充它。
答案2
我在我的中使用以下别名.zshrc
:
alias disablehistory="function zshaddhistory() { return 1 }"
alias enablehistory="unset -f zshaddhistory"
所以我可以运行disablehistory
,并且没有新命令会从我当前的会话中输入历史记录。然后,我就可以跑了enablehistory
。
怎么运行的?disablehistory
定义历史钩子函数。
如果任何钩子函数返回状态 1(或除 2 之外的任何非零值,尽管对于 shell 的未来版本不能保证这一点)历史行将不会被保存,尽管它会一直保留在历史记录中,直到执行下一行为止,允许您立即重用或编辑它。
因此它指示zsh
始终拒绝历史记录条目。
enablehistory
unsets(-f
代表函数)zshaddhistory
函数,因此返回默认行为。
答案3
这些可能会有所帮助:您可以键入unset HISTFILE
以关闭会话历史记录。注销并重新登录将再次启动。
此外,您可以返回到历史记录中的命令并通过点击 来删除它CTRL-u
。
祝你好运!