我正在尝试将一些bash dotfiles转换为他们的fish等价物。
我的~/.bash_logout
看起来像这样:
# Flush the in-memory history, then persist the emptiness to disk.
history -c && history -w;
虽然fish 有history
命令,但它没有相同的选项,所以上面的内容在fish中不能正常工作。
我到目前为止最接近的是history clear
,虽然这似乎只适用于当前会话并且没有持久化,因为历史记录会在我创建的任何新标签中返回。此外,它提示确认,我不希望每次我退出时都不这样做。
尽管如此,这是进展,所以根据another answer,我将其放在~/.config/fish/config.fish
中:
function on_exit --on-process %self
history clear
end
这似乎甚至没有提示我,更不用说做任何有用的事了。或者,如果确实如此,它是非阻塞的,并且发生得如此之快,以至于我无法看到它。
如何在退出处理程序中永久删除鱼壳历史并将该状态保留在将来的会话中?现有会议也会很好,但不太重要。
最后,history
联机帮助页指出“内置历史记录”并未提示确认。是否有意义使用它,如果是,如何使用?
·clear清除历史文件。在删除历史记录之前会显示提示,要求您确认是否确实要清除所有历史记录,除非使用内置历史记录。
答案 0 :(得分:4)
对我来说,history clear
似乎适用于各个会话并通过启动而持续存在。您是否更新到最新版本或FiSh?我使用的是2.6.0版本。
echo $version
要删除确认提示,您可以直接编辑该功能(funced history
),删除保留191-192的第188-195行。虽然,所有这些实际上都是最终运行命令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 ,它告诉fish在哪里可以找到配置文件。您可以自己设置并使用以下命令全局导出:
set -gx XDG_CONFIG_HOME ~/.config/
然后使用事件处理程序创建配置文件:
function bye --on-process-exit %self
builtin history clear
echo Session history scrubbed. Goodbye
end
完成。剩下的唯一历史记录项是用于结束当前shell会话的命令exit
。
希望这会有所帮助。似乎对我有用,但如果遇到问题,我可能会指出你的答案。