这可能是 zsh 中的错误或错误功能,但我不太了解,我可能会误解。
compinit
(初始化完成的函数)运行compaudit
以强制执行一个安全模型,它只会从您的目录中加载完成函数,这些目录$fpath
被认为是“安全的”(由 root 或我拥有,而不是世界可写等)。它将警告用户有关不安全的路径并提示跳过它们或中止它们。这一切都很好。
它在 处创建结果缓存~/.zcompdump
。AFAICT,它只是手动失效(即删除)。
我不完全清楚缓存中有什么,所以我不能说这是否真的是一个很大的安全问题。但是,至少,compinit
即使缓存由其他用户拥有,也会认为缓存有效,从而避免加载对当前用户有效但对前一个用户无效的完成函数。
每次我使用sudo -s
我拥有的 zsh 安装(OS X 自制软件)时,都会发生这种情况。它写入一个不完整的完成缓存。然后我开始下一个shell,它加载了被破坏的缓存并且没有看到任何完成。
这是我的问题吗?ZSH的?家酿?