有时,当我在终端上键入命令时,即使我的命令没有错,终端的自动完成也不起作用。
例如,看一下:sudo service vsftpd status
sudo和service没问题。我的意思是,当你键入SUD + tab终端建议你执行sudo或I型Servi大街 + tab终端的完整,为服务。但是对于vsftpd我没有任何建议。有没有办法说“终端,请告诉我任何建议!?”。
有时,当我在终端上键入命令时,即使我的命令没有错,终端的自动完成也不起作用。
例如,看一下:sudo service vsftpd status
sudo和service没问题。我的意思是,当你键入SUD + tab终端建议你执行sudo或I型Servi大街 + tab终端的完整,为服务。但是对于vsftpd我没有任何建议。有没有办法说“终端,请告诉我任何建议!?”。
Answers:
自动完成的工作程度取决于bash-completion
程序包中的Shell脚本的工作情况。
在Ubuntu 14.04中,处理的脚本service
位于中/usr/share/bash-completion/bash_completion
。它在/etc/rc.d/init.d
和/etc/init.d
中以及在输出中查找服务名称作为文件systemctl list-units --full --all
。
但是安装该vsftpd
软件包不会在中放入任何文件/etc/init.d
,因为它已经被- systemd
化了。它将配置文件放入/etc/systemd/system/vsftpd.service
。systemctl list-units
如果不是因为Ubuntu目前不包含systemctl
命令,便会找到该文件。
因此,目前您不会自动完成service vsftpd
,但大多数其他服务都会自动完成,因为它们的配置文件位于中/etc/init.d
。
当有多个可能的建议时,tab将不会产生任何建议。使用tab tab(双标签)将产生所有可能建议的列表。
sudo service vsftpd status
,vsftpd是服务的参数,因此无法使用双标签找到。此时OP是正确的。
apache2
和networking
自动完成。它们有何不同?
sudo service networking tab tab
将提供force-reload reload restart start stop
。因此它的工作效果比我想像的还要好。
sudo systemctl
状态或停止)lightd
(TAB / Double TAB)(意味着完整的“ lightdm.service”(假设您已安装)–是否处于活动/运行状态)此svc既以单位输出形式,也/etc/init.d
位于我的计算机上。我在其他服务上也发现了同样的问题。还有一个bug(?),使完成过程花费很长时间。看到它坐了10秒钟以上才对我发出哔哔声/找不到。github.com/systemd/systemd/issues/7185