不将失败的命令保存到历史记录中吗?

不将失败的命令保存到历史记录中吗?

我使用下面的代码片段来排除所有失败的命令(返回代码 1)保存到 zsh 历史记录:

 zshaddhistory() { whence ${${(z)1}[1]} >| /dev/null || return 1 }

但如果该命令是别名lsl(alias lsl='ls -l'),失败的命令仍将被插入到 zsh 历史记录中:

lsl whatever_folder_doesnt_exist

whatever_folder_doesnt_exist不存在,而且我lsl whatever_folder_doesnt_exist仍然在 zsh 历史中观察到。

这里我想排除所有返回码不是的命令0,我该怎么做?

答案1

您可以使用插件zsh-hist设置一个precmd钩子,从历史记录中删除最后一项(如果它具有非零退出状态):

source path/to/zsh-hist.plugin.zsh
delete-failed-history() {
  (( ? )) && 
    hist -s d -1
}
autoload -Uz add-zsh-hook
add-zsh-hook precmd delete-failed-history

如果您希望它仅删除具有1确切退出状态的命令,则更(( ? ))改为(( ? == 1 )).

相关内容