跨会话永久清除鱼 shell 历史记录

Clear fish shell history permanently across sessions

我正在尝试将一些 bash 点文件转换为它们的 fish 等价物。

我有一个 ~/.bash_logout 看起来像这样:

# Flush the in-memory history, then persist the emptiness to disk.
history -c && history -w;

虽然 fish 确实 有一个 history 命令,但它没有相同的选项,因此上面的内容在 fish 中不会按原样工作。

到目前为止我得到的最接近的是 history clear,尽管这似乎只适用于当前会话并且不会持久存在,因为历史记录会返回到我创建的任何新选项卡中。此外,它会提示确认,我不希望每次注销时都必须这样做。

不过还是进步了,所以在的基础上,我把这个放在~/.config/fish/config.fish:

function on_exit --on-process %self
    history clear
end

这似乎连提示都没有,更不用说做任何有用的事情了。或者,如果是这样,它是非阻塞的并且发生得如此之快以至于我看不到它。

如何在退出处理程序中永久删除鱼 shell 历史记录并为将来的会话保留该状态?现有会话也不错,但不太重要。

最后,history 联机帮助页指出 "builtin history" 不会提示确认。使用它是否有意义?如果是,如何?

· clear clears the history file. A prompt is displayed before the history is erased asking you to confirm you really want to clear all history unless builtin history is used.

对我来说,history clear 似乎适用于所有会话并在整个启动过程中持续存在。你更新到最新版本或 FiSh 了吗?我使用的是 2.6.0 版本。

    echo $version

要删除确认提示,您可以直接编辑函数 (funced history),删除第 188-195 行,保留第 191-192 行。虽然,所有这些实际上所做的最终都是 运行 命令 builtin history clear,所以这将实现完全相同的事情减去确认。只需输入:

    builtin history clear

(对我来说,这似乎确实跨越了会话并且是持久的。)

关于事件处理程序,退出处理程序未触发的原因是因为 %self 被扩展到当前 运行ning [=52] 的 PID =] 过程。但是,一旦退出并启动新的,事件处理程序将不会触发,因为 PID 将不同。

因此此函数将在退出当前 运行ning shell 进程之前触发:

    function bye --on-process-exit %self
        echo byeeeeeeee
    end

该进程,任何后续创建的进程。相反,将该函数添加到您的 config.fish 文件中,这将确保它在每次启动时使用正确的当前 PID 初始化事件处理程序。配置文件,如果存在,位于~/.config/fish/config.fish 如果不存在,确保环境变量XDG_CONFIG_HOME 已设置,它告诉鱼在哪里可以找到配置文件。您可以自己设置并全局导出:

    set -gx XDG_CONFIG_HOME ~/.config/

然后使用事件处理程序创建配置文件:

    function bye --on-process-exit %self
        builtin history clear
        echo Session history scrubbed.  Goodbye
    end

完成。剩下的唯一历史记录项将是用于结束当前 shell 会话的命令 exit

希望这对您有所帮助。似乎对我有用,但如果你 运行 遇到问题,我也许可以为你指出一些答案的线索。