gpt4 book ai didi

shell - 跨 session 永久清除 fish shell 历史记录

转载 作者:行者123 更新时间:2023-12-05 09:17:26 25 4
gpt4 key购买 nike

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

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

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

虽然 fish 确实有一个 history 命令,但它没有相同的选项,所以上面的命令在 fish 中不能正常工作。

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

尽管如此,还是进步了,所以基于another answer ,我把它放在 ~/.config/fish/config.fish 中:

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

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

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

最后,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 似乎适用于所有 session ,并在整个启动过程中持续存在。你更新到最新版本或 FiSh 了吗?我使用的是 2.6.0 版。

    echo $version

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

    builtin history clear

(同样,对我来说,它似乎确实跨越了 session 并且是持久的。)

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

所以这个函数将在退出当前运行的 shell 进程之前触发:

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

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

    set -gx XDG_CONFIG_HOME ~/.config/

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

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

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

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

关于shell - 跨 session 永久清除 fish shell 历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47890353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com