对于某些服务名称,按 TAB 自动完成功能不起作用

对于某些服务名称,按 TAB 自动完成功能不起作用

我可以在我的 Ubuntu 14.04.3 终端上运行以下命令,没有任何问题:

sudo service network-manager restart
[sudo] password for username: 
network-manager stop/waiting
network-manager start/running, process 5204

如果我输入sudo service network然后按下Tab,它会自动完成sudo service networking
如果我输入然后按下,sudo service network-maTab不会自动完成。

我的问题是,如果有一个名为的服务network-manager可以通过service命令重新启动,为什么它的名称没有自动完成? 以及如何解决?

更新:

ls -l /etc/init.d/network*
-rwxr-xr-x 1 root root 4479 Apr 28  2014 /etc/init.d/networking

答案1

的制表符补全service查找 中的文件/etc/init.d。由于那里没有network-manager文件,制表符补全失败。更好的问题是为什么service network-manager它能起作用。

根据service手册页:

   The  SCRIPT  parameter  specifies  a  System  V init script, located in
   /etc/init.d/SCRIPT, or the name of an upstart  job  in  /etc/init. 

因此,由于有一个/etc/init/network-manager.conf文件,service可以查询它,但没有自动完成,因为中没有该名称的脚本/etc/init.d

一个简单的解决方法是创建一个名为的空network-manager文件/etc/init.d

sudo touch /etc/init.d/network-manager

完成此操作后,您可以按预期使用制表符完成名称。我在虚拟机中测试了这一点,它似乎工作正常,所有命令都service network-manager start|stop|restart|status有效,似乎没有任何问题。我假设这意味着空文件被忽略并仅用于完成,所以看起来这是安全的。

相关内容