我如何创建类似于别名的东西,并能正确扩展到初始命令?

我如何创建类似于别名的东西,并能正确扩展到初始命令?

apt-get update我已经为、等设置了别名apt-get install。这很方便。但我真正想要的是这样的:

输入agi TAB vi并让它自动列出所有以...开头的包,就像发行时发生的那样apt-get install TAB vi

是否可以以某种方式实现这样的目标,例如通过编写一个小脚本?

答案1

我自己并不太关心 Bash 可编程完成,但我相信这可以满足您的要求(NB 假设 bash 版本 4.0 或更新版本。如果您运行 Ubuntu 10.04 或更新版本,那就很好了。):

alias agi='apt-get install'
_agi_completion() { 
    mapfile -t COMPREPLY < <(apt-cache --no-generate pkgnames "${COMP_WORDS[COMP_CWORD]}")
}
complete -F _agi_completion agi

可编程完成bash 的手册中解释了它是如何工作的,尽管它相当复杂。

答案2

您需要将别名添加到 shell 补全字典中,以便它知道它要为这些命令补全什么。shell 补全应该已经命名为函数,但您必须告诉它它们适用于您的新命令名称。

相关内容