¿Por qué el terminal automático completo a veces no sugiere nada para el comando `services`?

17

A veces, cuando escribo un comando en el terminal, el autocompletado del terminal no funciona, incluso si mi comando no es incorrecto.

Por ejemplo, mire esto: sudo service vsftpd statussudo y service no tienen ningún problema. Quiero decir, cuando escribes sud + tabterminal te sugiero sudo o yo escribo servi + tabterminal completa eso para dar servicio . Pero para vsftpd no recibo ninguna sugerencia. ¿Hay alguna manera de decir, "terminal, por favor dime alguna sugerencia!".

Mohammad Reza Rezwani
fuente

Respuestas:

28

El grado en que funciona la finalización automática depende de qué tan bien funcionen los scripts de shell en el bash-completionpaquete.

En Ubuntu 14.04, el script que maneja las terminaciones serviceestá en /usr/share/bash-completion/bash_completion. Busca nombres de servicios como archivos en /etc/rc.d/init.dy /etc/init.d, y en la salida de systemctl list-units --full --all.

Pero la instalación del vsftpdpaquete no coloca ningún archivo /etc/init.dporque ha sido systemd-ificado; pone un archivo de configuración en /etc/systemd/system/vsftpd.service. systemctl list-unitsencontraría ese archivo si no fuera por el hecho de que Ubuntu, en este momento, no incluye un systemctlcomando.

Entonces, en este momento, no obtendrá autocompletados service vsftpd, pero sí para la mayoría de los otros servicios, ya que sus archivos de configuración están incluidos /etc/init.d.

Mark Plotnick
fuente
Para aquellos que encuentran esta respuesta: los servicios de búsqueda de finalización (y el tiempo para buscar / analizar) siempre ha sido un problema en 14.xx, 16.xx 18.xx: Buen ejemplo: sudo systemctl (estado o detención) lightd(TAB / Double TAB) ( Significado completo 'lightdm.service', suponiendo que lo tenga instalado - activo / en ejecución o no) Este svc está tanto en la salida de las unidades como /etc/init.den mi máquina. También he encontrado el mismo problema en otros servicios. También hay un error (?) Que hace que tarde mucho tiempo en completarse. Visto que se sienta más de 10 segundos antes de sonar / no encontrado. github.com/systemd/systemd/issues/7185
bshea
9

Cuando hay varias sugerencias posibles, tabno producirá ninguna sugerencia. El uso de tab tab(doble pestaña) producirá una lista de todas las sugerencias posibles.

Dan
fuente
Solía: tab + tab no funciona para vsftpd. La sugerencia de usted y Rinzwind es trabajar, por ejemplo, su + tab + tab. Pero para vsftpd no funciona.
Mohammad Reza Rezwani
puede probar que primero instale el pequeño programa vsftpd por sudo apt-get install vsftpd y luego intente tab + tab
Mohammad Reza Rezwani
2
tab + tab no funciona en caso de parámetros. En sudo service vsftpd status, el vsftpd es un parámetro de servicio, y por lo tanto no se encontrará con una doble pestaña. El OP es correcto en este punto.
Jos
2
@Jos Pero otros servicios como apache2y networkingautocompletar. ¿En qué se diferencian?
Dan
@ dan08 Estoy corregido. Por otra parte, sudo service networking tab tabse ofrecerá force-reload reload restart start stop. Entonces funciona incluso mejor de lo que pensaba.
Jos
6

vsftpd tiene probablemente más de 1 opción. tabdos veces para ver las posibilidades.

Ejemplo: licon tabtabespectáculos:

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

¡Puedes construir el tuyo!

Por ejemplo: poner complete -f -r -c su -d 'Username' -a '(cat /etc/passwd|cut -d : -f 1)'en bash de lo que tienes suy presionar tab / tab te da todos los usuarios, sí. Ver aquí

elf12
fuente
0

Descubrí que systemctl list-units --full --allno enumera los servicios deshabilitados, por lo que no se completa automáticamente.

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

El comando de servicios se basa en "systemctl list-units --full --all", y no enumera los servicios que no pueden iniciarse (o deshabilitarse como se indicó anteriormente), para confirmar si experimenta este problema, puede ejecutar

systemctl status <service_name>
chispas
fuente