柴柴's TIL

Shell 补全命令应缓存到文件而非每次动态生成

· 3 views ·

许多 CLI 工具提供 completion --shell zsh 命令来生成 shell 补全脚本,官方文档通常建议写成:

source <(mycli completion --shell zsh)

这会在每次开终端时启动一个子进程动态生成补全代码。对于 Node.js 实现的 CLI,这个过程可能非常慢(实测 2.8 秒)。

更好的做法是把补全输出缓存到文件,然后 source 静态文件:

# 生成一次(安装/升级后执行)
mycli completion --shell zsh > ~/.mycli_completion.zsh

# .zshrc 中只读取静态文件
[ -f ~/.mycli_completion.zsh ] && source ~/.mycli_completion.zsh

缓存文件读取几乎零开销,缺点是升级 CLI 后需要手动重新生成。