web-dev-qa-db-fra.com

Pourquoi l'auto-complétion automatique ne suggère-t-elle parfois rien pour la commande `services`?

Parfois, lorsque je tape une commande sur le terminal, la saisie semi-automatique du terminal ne fonctionne pas, même si ma commande n'est pas erronée.

Par exemple, regardez ceci: Sudo service vsftpd status Sudo et le service ne rencontrent aucun problème. Je veux dire, quand vous tapez sud +tab terminal vous suggère Sudo ou je tape servitab terminal complète cela à service. Mais pour vsftpd, je ne reçois aucune suggestion. Y at-il un moyen de dire, "terminal, s'il vous plaît dites-moi n'importe quelle suggestion !!?".

17

La mesure dans laquelle l'auto-complétion fonctionne dépend de l'efficacité des scripts Shell dans le package bash-completion.

Dans Ubuntu 14.04, le script qui gère les complétions pour service se trouve dans /usr/share/bash-completion/bash_completion. Il recherche les noms de service sous forme de fichiers dans /etc/rc.d/init.d et /etc/init.d et dans la sortie de systemctl list-units --full --all.

Mais l'installation du paquetage vsftpd ne place aucun fichier dans /etc/init.d, car il s'agit de systemd-ified; il met un fichier de configuration dans /etc/systemd/system/vsftpd.service. systemctl list-units trouverait ce fichier sans le fait qu'Ubuntu, à l'heure actuelle, n'inclut pas de commande systemctl.

Donc, pour le moment, vous ne recevrez pas d'auto-complétions pour service vsftpd, mais pour la plupart des autres services, car leurs fichiers de configuration sont au format /etc/init.d.

28
Mark Plotnick

Quand il y a plusieurs suggestions possibles, tab ne produira aucune suggestion. En utilisant tabtab (double onglet) produira une liste de toutes les suggestions possibles.

9
Dan

vsftpd a probablement plus d'une option. tab deux fois pour voir les possibilités.

Exemple: li with tabtab spectacles:

libnetcfg          line               lintian-info       lispmtopgm
libreoffice        linguist           linux32            listres
lightdm            link               linux64            
lightdm-session    lintian            linux-boot-prober  
6
Rinzwind

Vous pouvez construire le vôtre!

Par exemple: mettez complete -f -r -c su -d 'Username' -a '(cat /etc/passwd|cut -d : -f 1)' dans bash que si vous avez su et que vous appuyez sur tab/tab, tous les utilisateurs y trouveront leur compte. Voir ici

4
elf12

J'ai constaté que systemctl list-units --full --all ne répertorie pas les services désactivés, donc l'auto-complétion ne le fait pas.

# check if enabled
systemctl is-enabled <service_name>
# enable
systemctl enable <service_name>
0
Lluís