web-dev-qa-db-fra.com

Autocomplete sur les commandes .bash_aliases?

J'ai tout un tas de commandes avec alias dans .bash_aliases

Les exemples les plus génériques sont

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

mais alors j'ai aussi

alias apt-install="Sudo apt-get install "
alias a2avail="/etc/Apache2/sites-available"

Les deux premiers ne sont pas un problème, les deux derniers je veux rendre le plus puissant;

Spécifiquement pour apt-install je veux que la complétion automatique fonctionne.

pour a2avail, je veux pouvoir taper quelque chose comme Sudo cp a2avail/default a2avail/new et le faire exécuter en tant que Sudo cp /etc/Apache2/sites-available/default /etc/Apache2/sites-available/new

l'une ou l'autre de ces deux choses est-elle possible?

6
Hailwood

Ajouter ce qui suit à votre ~/.bashrc devrait compléter les noms de paquet pour votre alias apt-install

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

Comme pour a2avail, un alias ne fonctionnera que comme le premier mot d'une commande, mais vous pouvez utiliser une variable.

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

# then...
Sudo cp "$a2avail"/{default,new}
5
geirha

À partir du 4 juillet 2017:

  1. Installez alias complet .

  2. Ajoutez cette ligne: complete -F _complete_alias apt-install.

Vous avez terminé.

0
Cyker