Set*_*day 1 shell command-line input-history fish
我正在尝试将一些bash dotfile转换为它们的鱼等效项。
我有一个~/.bash_logout看起来像这样:
# Flush the in-memory history, then persist the emptiness to disk.
history -c && history -w;
Run Code Online (Sandbox Code Playgroud)
尽管fish 确实具有history命令,但是它没有相同的选项,因此上述内容无法在fish中照常使用。
到目前为止history clear,我得到的最接近的是,尽管这似乎仅适用于当前会话,并且不会保留下来,因为历史记录会在我创建的任何新选项卡中返回。此外,它会提示您进行确认,我希望每次注销时都不必这样做。
但是,这是进步,因此基于另一个答案,我将其输入~/.config/fish/config.fish:
function on_exit --on-process %self
history clear
end
Run Code Online (Sandbox Code Playgroud)
这似乎甚至没有提示我,更不用说做任何有用的事情了。否则,它就不会阻塞并且发生得太快,以至于我看不到它。
如何在出口处理程序中永久擦除鱼壳历史并在以后的会话中保持该状态?现有的会话也将很好,但是重要性不那么高。
最后,history手册页指出“内置历史记录”不会提示您进行确认。改为使用它是否有意义,如果可以,如何使用?
·clear清除历史记录文件。在删除历史记录之前会显示一个提示,要求您确认您是否确实要清除所有历史记录,除非使用内置历史记录。
对我来说,history clear似乎适用于所有会话,并且在启动时一直存在。您已更新到最新版本或FiSh吗?我正在使用2.6.0版。
echo $version
Run Code Online (Sandbox Code Playgroud)
要删除确认提示,您可以直接编辑功能(funced history),删除第188-195行保留191-192行。尽管实际上所有这些操作最终都是运行命令builtin history clear,所以减去确认后,这将实现完全相同的操作。只需键入:
builtin history clear
Run Code Online (Sandbox Code Playgroud)
(对我而言,这似乎确实跨越了各个会话并且是持久的。)
关于事件处理程序,退出处理程序不触发的原因是因为%self被扩展为当前正在运行的Shell进程的PID。但是,一旦退出并启动新的事件处理程序,事件处理程序将不会触发,因为PID会有所不同。
因此,此函数将在退出当前正在运行的shell进程之前触发:
function bye --on-process-exit %self
echo byeeeeeeee
end
Run Code Online (Sandbox Code Playgroud)
但仅此过程,而不是随后创建的任何过程。而是将函数添加到config.fish文件中,这将确保它在每次启动时使用正确的当前PID来初始化事件处理程序。配置文件(如果存在)位于〜/ .config / fish / config.fish( 如果不存在),请确保设置了环境变量XDG_CONFIG_HOME,该参数告诉fish在哪里找到配置文件。您可以自己设置它,并使用以下命令将其全局导出:
set -gx XDG_CONFIG_HOME ~/.config/
Run Code Online (Sandbox Code Playgroud)
然后使用事件处理程序创建配置文件:
function bye --on-process-exit %self
builtin history clear
echo Session history scrubbed. Goodbye
end
Run Code Online (Sandbox Code Playgroud)
做完了 剩下的唯一历史记录项将是exit用于结束当前Shell会话的命令。
希望这可以帮助。似乎对我有用,但是如果您遇到问题,我也许可以为您提供一些答案的线索。