我试图将一些bash dotfiles转换为他们的fish等价物。
我有一个看起来像这样的~/.bash_logout
:
# Flush the in-memory history, then persist the emptiness to disk.
history -c && history -w;
虽然鱼确实有history
命令,但它没有相同的选项,因此上述方法在鱼类中不起作用。
到目前为止我最接近的是history clear
,虽然这似乎只适用于当前的会话并且不会持久,因为历史会在我创建的任何新标签中出现。此外,它提示确认,我不希望每次我退出时都这样做。
尽管如此,这是进步,所以基于another answer,我把它放在~/.config/fish/config.fish
:
function on_exit --on-process %self
history clear
end
这似乎甚至没有提示我,更不用说做任何有用的事了。或者,如果确实如此,它是非阻塞的,并且发生得如此之快,以至于我无法看到它。
如何永久删除鱼壳历史并在退出处理程序中保留该状态以供将来的会话使用?现有会议也会很好,但不太重要。
最后,history
手册页指出,“内置历史”并未提示确认。是否有意义使用它,如果是这样,怎么样?
·clear清除历史文件。在删除历史记录之前会显示提示,要求您确认是否确实要清除所有历史记录,除非使用内置历史记录。
对我来说,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,它告诉fish在哪里可以找到配置文件。您可以自己设置并全局导出:
set -gx XDG_CONFIG_HOME ~/.config/
然后使用事件处理程序创建配置文件:
function bye --on-process-exit %self
builtin history clear
echo Session history scrubbed. Goodbye
end
完成。剩下的唯一历史记录项是用于结束当前shell会话的命令exit
。
希望这可以帮助。似乎对我有用,但如果遇到问题,我可能会指出你找到答案的线索。