.bash_aliases 命令自动完成?

Hai*_*ood 6 command-line bash alias auto-completion

我有一大堆别名命令 .bash_aliases

最通用的例子是

alias apt-update="sudo apt-get update"  
alias apt-upgrade="sudo apt-get dist-upgrade"
Run Code Online (Sandbox Code Playgroud)

但我也有

alias apt-install="sudo apt-get install "
alias a2avail="/etc/apache2/sites-available"
Run Code Online (Sandbox Code Playgroud)

前两个没问题,后两个我想做更强大的;

特别是apt-install我希望自动完成工作。

对于 a2avail,我希望能够输入类似的内容sudo cp a2avail/default a2avail/new并将其作为sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/new

这两种情况中的任何一种都可能吗?

gei*_*rha 6

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

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

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

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

# then...
sudo cp "$a2avail"/{default,new}
Run Code Online (Sandbox Code Playgroud)