1

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

我有一个~/.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

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

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

最后,history手册页指出“内置历史记录”不会提示确认。使用它是否有意义,如果是,如何使用?

· clear 清除历史文件。在删除历史记录之前会显示一个提示,要求您确认是否确实要清除所有历史记录,除非使用内置历史记录。

4

1 回答 1

7

对我来说,history clear似乎适用于跨会话并通过启动持续存在。您是否已更新到最新版本或 FiSh ?我使用的是 2.6.0 版。

    echo $version

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

    builtin history clear

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

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

所以这个函数会在退出当前运行的 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

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

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

于 2017-12-19T20:33:23.487 回答