Skip to content

从 bash 进入 zsh 时出现 compinit: function definition file not found 问题

2025-08-23 · 355字 · 2分钟

系统: Ubuntu 22.04

今天登录学校的服务器时,使用我之前 [配置的 zsh](./配置 zsh.md) 突然报错。

/etc/zsh/zshrc:112: compinit: function definition file not found

由于我是用 oh-my-zsh 增强的 zsh,后面还跟了一串 omz 的报错。

起先尝试了重新更新 omz、删除zcompdump缓存等等跟发现都没用。

最后在 这里 找到了原因,原来是 lmod 同时支持 zshksh,在有些用户使用 ksh 时,修改了FPATH环境变量,这导致我在使用 zshFPATH 里找不到诸如 compinit 的函数路径。

经过尝试,在从 bash 进入 zsh 之前需要 unset FPATH,同时添加以下命令到 ~/.zshrc 的头部

sh
#.zshrc
if [ -f /projects/share/apps/lmod/lmod/init/zsh ]; then
    source /projects/share/apps/lmod/lmod/init/zsh
fi

之所以要在 bash 里 unset FPATH 是因为一旦登录 zsh 它就会继承 bash内的 FPATH,而在 .zshrc加入上述命令中则是希望在登录 zsh 后就为zsh初始化正确的 FPATH 以找到相应的函数。

最后为了方便,我在 ~/.bashrc 中加入了以下 alias:

sh
alias zsh="unset FPATH; exec zsh"

这样以后就不用反复输入 unset FPATH 了。

问题得到圆满解决,可惜为了排除故障原因,我把之前的 zsh 缓存全都清空了,现在没有之前运行命令的历史记录了呜呜呜。

返回

人同此心,心同此理;如风沐面,若水润心