![对于某些服务名称,按 TAB 自动完成功能不起作用](https://linux22.com/image/984223/%E5%AF%B9%E4%BA%8E%E6%9F%90%E4%BA%9B%E6%9C%8D%E5%8A%A1%E5%90%8D%E7%A7%B0%EF%BC%8C%E6%8C%89%20TAB%20%E8%87%AA%E5%8A%A8%E5%AE%8C%E6%88%90%E5%8A%9F%E8%83%BD%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%20.png)
我可以在我的 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-ma
则Tab不会自动完成。
我的问题是,如果有一个名为的服务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
有效,似乎没有任何问题。我假设这意味着空文件被忽略并仅用于完成,所以看起来这是安全的。