Pourquoi la terminaison automatique du terminal ne suggère-t-elle parfois rien pour la commande `services`?

17

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 statussudo et service n'ont aucun problème. Je veux dire, lorsque vous tapez sud + tabterminal, vous suggérez sudo ou que je tape servi + tabterminal complète cela au service . Mais pour vsftpd, je ne reçois aucune suggestion. Existe-t-il un moyen de dire "terminal, dites-moi s'il vous plaît une suggestion !!?".

Mohammad Reza Rezwani
la source

Réponses:

28

La mesure dans laquelle l'auto-complétion fonctionne est fonction de l'efficacité des scripts shell dans le bash-completionpackage.

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

Mais l'installation du vsftpdpackage ne place aucun fichier /etc/init.d, car il a été systemd-ified; il met un fichier de configuration dans/etc/systemd/system/vsftpd.service . systemctl list-unitstrouverait ce fichier sans le fait que Ubuntu, à l'heure actuelle, n'inclut pas de systemctlcommande.

Donc, pour le moment, vous n'obtiendrez pas d'auto-complétion pour service vsftpd, mais vous le ferez pour la plupart des autres services, car leurs fichiers de configuration sont dedans /etc/init.d.

Mark Plotnick
la source
Pour ceux qui trouvent cette réponse: les services de recherche d'achèvement (et le temps de recherche / analyse) ont toujours été un problème sous 14.xx, 16.xx 18.xx: Bon exemple: sudo systemctl (état ou arrêt) lightd(TAB / Double TAB) ( Signifiant «lightdm.service» complet en supposant que vous l'ayez installé - actif / en cours d'exécution ou non) Ce svc est à la fois en sortie d'unités et /etc/init.dsur ma machine. J'ai également trouvé le même problème sur d'autres services. Il y a aussi un bogue (?) Qui fait que cela prend beaucoup de temps pour terminer. Vu qu'il reste assis 10+ secondes avant de me biper / introuvable. github.com/systemd/systemd/issues/7185
bshea
9

Lorsqu'il y a plusieurs suggestions possibles, tabne produira aucune suggestion. L'utilisation de tab tab(double onglet) produira une liste de toutes les suggestions possibles.

Dan
la source
J'ai utilisé: tab + tab ne fonctionne pas pour vsftpd. Vous et la suggestion de Rinzwind travaillez par exemple su + tab + tab. Mais pour vsftpd ne fonctionne pas.
Mohammad Reza Rezwani
vous pouvez tester cette première installation du petit programme vsftpd par sudo apt-get install vsftpd puis essayer tab + tab
Mohammad Reza Rezwani
2
tab + tab ne fonctionne pas en cas de paramètres. Dans sudo service vsftpd status, le vsftpd est un paramètre de service, et ne sera donc pas trouvé avec un double onglet. L'OP est correct à ce stade.
Jos
2
@Jos Mais d'autres services comme apache2et la networkingsaisie semi - automatique. Comment sont-ils différents?
Dan
@ dan08 Je me tiens corrigé. En outre, sudo service networking tab taboffrira force-reload reload restart start stop. Cela fonctionne donc encore mieux que je ne le pensais.
Jos
6

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

Exemple: liavec des tabtabspectacles:

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

Vous pouvez construire le vôtre!

Par exemple: mettez complete -f -r -c su -d 'Username' -a '(cat /etc/passwd|cut -d : -f 1)'en bash que si vous l'avez suet appuyez sur tab / tab cela vous donne tous les utilisateurs, oui. Voir ici

elf12
la source
0

J'ai trouvé que la systemctl list-units --full --allliste ne répertorie pas les services désactivés.

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

La commande services s'appuie sur "systemctl list-units --full --all", et ne répertorie pas les services qui ne peuvent pas démarrer (ou désactivés comme ci-dessus), pour confirmer si vous rencontrez ce problème, vous pouvez exécuter

systemctl status <service_name>
des étincelles
la source