别名会减慢 shell 的启动速度吗?

别名会减慢 shell 的启动速度吗?

有时我的 shell(zsh)启动所需的时间比平时更长(我打开终端,它会挂起一段时间直到我可以输入命令)。

我有几个别名.zshrc(实际上它们在另一个文件中.zshrc做了source)​​。

alias如果在打开 shell 的情况下执行一个命令,它只在当前会话中有效,所以我开始怀疑这一切source是否alias会真正损害 shell 的启动性能(我假设它必须经过一个漫长的过程来在启动时运行所有这些命令)。

如果确实发生这种情况,将这些别名作为 shell 脚本并将它们放在我的小路

答案1

启动文件中的几个额外别名定义不太可能导致明显的启动延迟。即使您有这么多别名定义,以至于确实很重要,延迟也不会是零星的,每次都会一样。

更可能的是,启动过程中的某些东西正在等待网络。例如,位于网络驱动器上的路径目录尚未准备好,或者可能根本没有通电。网络超时通常需要几秒钟。

答案2

也许您在调用 compinit 时没有“转储”完成系统?(这可能会减慢 zsh 的启动速度……)。如果您正在使用 compinit,请确保您只是调用

autoload -U compinit
compinit

(没有任何有趣的 compinit 选项,特别是没有-D)。

使用该功能后,第一次启动 shell 时速度会很慢(因为它会生成转储,但下一次启动时不会)。

其他想法,也许您的系统弄乱了完成功能,并且每次都强制生成新的转储?尝试在您的.zshrcwith中设置 compinit -C(至少生成一次转储后)。

答案3

对于使用 oh-my-zsh 的人来说,值得一提的是,它为 .zcompudump 文件设置了一个不同的名称,即:$ZSH_COMPDUMP。其目的是测试文件是否超过一天并重新生成它。这是我的尝试,请大家评论并给我一些建议:

autoload -Uz compinit
if [[ -n ${ZDOTDIR:-${HOME}}/$ZSH_COMPDUMP(#qN.mh+24) ]]; then
    compinit -d $ZSH_COMPDUMP;
else
    compinit -C;
fi;

# -D ........... disables .zcompudump file
# -d ........... used to set an alternative name to .zcompdump
# -i ........... accept insecure files
# -C ........... ignore checking at all

参考:

相关内容