为什么自定义 upstart 作业名称没有在服务命令中完成制表符?

为什么自定义 upstart 作业名称没有在服务命令中完成制表符?

我习惯使用文件来创建 upstart 服务,/etc/init/<service>.conf而且它运行得很好,我唯一想要的就是像现在 /etc/init.d/ 中的每个服务一样使用制表符完成功能。

当写入 sudo service xx 时,应该出现服务的名称。

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

答案1

/etc/init.d根据 Debian 政策,每个使用 upstart 提供标准守护进程的软件包都需要提供符号链接。因此,自动完成功能已经起作用。如果遇到问题,请确保已安装该软件包。sudo service namebash-completion

如果您正在创建自己的 upstart 作业,则符号链接与其他 upstart 作业一样。这将使您自己的作业以相同的方式工作。/etc/init.d/your_job/lib/init/upstart-job

中有一些特殊的 upstart 作业在/etc/init中没有对应的条目/etc/init.d。这些是例外。来自 Debian Policy:

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

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

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

相关内容