我正在尝试编写一个 shell 脚本实用程序,将其他 shell 实用程序包装成单个 CLI,并尝试在 zsh 和 bash 中使 shell 自动完成工作。
例如,假设 CLI 名为 util
:
util aws [...args] #=> runs aws
util docker [...args] #=> runs docker
util terraform [...args] #=> runs terraform
我理想中希望在 zsh 和 bash 的自动补全功能中,能够独立于所包装的脚本实现,并且可以像完成其他命令 Y 一样,完成子命令 X。类似于:
complete -X like Y
compdef 'util aws'='aws'
compdef 'util docker'='docker'
compdef 'util terraform'='terraform'
一个扩展目标是允许对另一个二进制文件中的子命令执行任意子命令:
util aws [...args] #=> completes against `aws`
util ecr [...args] #=> completes against `aws ecr`
这是否可能?我一直在尝试模拟各个二进制文件的完成脚本,但是其他完成脚本的编写方式存在显着差异。
sudo
命令的补全的。在我的情况下,输入sudo foo <tab>
会显示foo
的补全选项。也许一个懒惰的解决办法是使用compdef util=sudo
。请注意保持原文意思不变,同时使翻译更通俗易懂。 - muru