为什么不在service命令中完成自定义upstart作业名称选项卡?

我习惯用/etc/init/.conf的文件创建upstart服务,它工作得很好,我唯一想做的就是让tab完成方式与/ etc中的每个服务相同/init.d/现在有。

在编写sudo服务xx时,服务的名称应该是apear。

有没有办法将upstart服务添加到该自动完成列表?

每个使用upstart提供标准守护程序的包都需要在Debian策略的/etc/init.d提供符号链接。 所以sudo service name自动完成已经有效。 如果遇到问题,请确保已安装bash-completion软件包。

如果您正在创建自己的upstart作业,那么symlink /etc/init.d/ your_job/lib/init/upstart-job就像其他upstart /lib/init/upstart-job一样。 这将使您自己的工作以同样的方式工作。

/etc/init中有特殊的upstart作业,在/etc/init.d没有相应的条目。 这是一个例外。 来自Debian政策:

此规则的一个例外是init实现本身提供的脚本或作业; 对于特定于实现的等效的/etc/rcS.d/脚本,可能需要这样的作业,并且可能与init脚本没有一对一的对应关系。

这些exception目前不适用于bash-completion 。 但是,您可以直接使用startstoprestartreload而无需service ,并且自动完成function将起作用。 例如, sudo start shut正确sudo start shut自动完成。 但是通常不需要直接调用没有相应init.d条目的upstart作业。

注意:我在Saucy上测试了这个。 如果旧版本中没有出现支持,可能它在那里不可用(但是当你升级到一个足够新的版本时,你很快就会得到它)。