为什么终端自动完成有时不会对“服务”命令提出任何建议?

为什么终端自动完成有时不会对“服务”命令提出任何建议?

有时,当我在终端上输入命令时,终端的自动完成功能不起作用,即使我的命令没有错。

例如,看看这个:sudo service vsftpd statussudo 和 service 没有任何问题。我的意思是,当你输入南方+tab终端建议您须藤或者我输入服务+tab终端完成服务。但是对于 vsftpd,我没有收到任何建议。有没有办法说“终端,请告诉我任何建议!!?”。

答案1

自动完成功能的运作程度取决于bash-completion包中的 shell 脚本的运作情况。

在 Ubuntu 14.04 中,处理 补全的脚本service在 中。它在和以及 的输出中/usr/share/bash-completion/bash_completion查找服务名称作为文件。/etc/rc.d/init.d/etc/init.dsystemctl list-units --full --all

但是安装该vsftpd软件包并不会将任何文件放入其中/etc/init.d,因为它已经被systemd-ified;它将一个配置文件放入其中/etc/systemd/system/vsftpd.servicesystemctl list-units如果不是因为 Ubuntu 目前不包含命令,它将找到该文件systemctl

因此,目前,您不会获得 的自动完成功能service vsftpd,但对于大多数其他服务,您会获得,因为它们的配置文件位于 中/etc/init.d

答案2

当有多个可能的建议时,tab不会产生任何建议。使用tab tab(双击)将产生所有可能建议的列表。

答案3

vsftpd 可能有多个选项。单击tab两次以查看可能性。

例如:li显示tabtab

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

答案4

我发现systemctl list-units --full --all没有列出已禁用的服务,因此自动完成功能不起作用

# check if enabled
systemctl is-enabled <service_name>
# enable
systemctl enable <service_name>

相关内容