.bash_aliases 命令自动完成吗?

.bash_aliases 命令自动完成吗?

我有一大堆别名命令.bash_aliases

最常见的例子是

alias apt-update="sudo apt-get update"  
alias apt-upgrade="sudo apt-get dist-upgrade"

但我也有

alias apt-install="sudo apt-get install "
alias a2avail="/etc/apache2/sites-available"

前两个没问题,后两个我想让它更强大一些;

具体来说,apt-install我希望自动完成功能能够正常工作。

对于 a2avail 我希望能够输入类似的内容sudo cp a2avail/default a2avail/new并让它运行sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/new

这两件事有可能吗?

答案1

将以下内容添加到您~/.bashrc的 apt-install 别名的完整包名称中

_apt_install_complete() { 
    mapfile -t COMPREPLY < <(apt-cache --no-generate pkgnames "$2");
}
complete -F _apt_install_complete apt-install

对于 a2avail,别名只能作为命令的第一个单词,但您可以使用变量。

a2avail=/etc/apache2/sites-available   # in ~/.bashrc

# then...
sudo cp "$a2avail"/{default,new}

答案2

截至 2017 年 7 月 4 日:

  1. 安装完整别名

  2. 添加此行:complete -F _complete_alias apt-install

你已经完成了。

相关内容