【发布时间】:2015-07-26 19:24:18
【问题描述】:
最近我想在 Mac 中尝试 Z shell。但我还想继续将命令历史记录保存到 ~/.persistent_history,这就是我在 Bash 中所做的 (ref)。
但是,参考链接中的脚本在 Zsh 下不起作用:
log_bash_persistent_history()
{
[[
$(history 1) =~ ^\ *[0-9]+\ +([^\ ]+\ [^\ ]+)\ +(.*)$
]]
local date_part="${BASH_REMATCH[1]}"
local command_part="${BASH_REMATCH[2]}"
if [ "$command_part" != "$PERSISTENT_HISTORY_LAST" ]
then
echo $date_part "|" "$command_part" >> ~/.persistent_history
export PERSISTENT_HISTORY_LAST="$command_part"
fi
}
run_on_prompt_command()
{
log_bash_persistent_history
}
PROMPT_COMMAND="run_on_prompt_command"
有没有人可以帮助我让它工作?非常感谢!
【问题讨论】:
-
This 应该有助于替换
PROMPT_COMMAND。用grep -o或cut或类似方法替换[[用法应该是可行的,但取决于zsh 中history的确切输出。 -
@EtanReisner 非常感谢!对于
PROMPT_COMMAND,该链接应该会有所帮助。对于[[部分,我刚刚使用命令history发现,bash 将在最后一行给出最新的(在本例中为history)。但是在 Zsh 下,history命令不会返回最新的命令,它会在最后一行返回history之前使用的命令。有任何想法吗? :-) -
好吧,我认为没有理由重新发明轮子。只需设置
HISTFILE并将HISTSIZE和SAVEHIST设置为一些可笑的大尺寸(我的是100,000,我认为没有理由让它们变大,因为我在iTerm2中记录了我所有的终端会话——这就是所有命令+输出,在我的提示中时间减少到几秒钟)。默认的历史格式关联了 POSIX 时间戳,这比你的更准确,因为你的没有 tzinfo。 -
(如果你想结合 zsh 和 bash 历史——好吧,那是自找麻烦。两个 shell 的语法在很多方面都不兼容,特别是如果你在一定程度上自定义了 zsh。)
-
@4ae1e1 是的,你提出了一个很好的观点。我会考虑一下。非常感谢!