Don’t Rely on Ubuntu 14.04 Service Autocomplition

Don’t Rely on Ubuntu 14.04 Service Autocomplition
Page content

It appears lot of my colleagues think they’ll get the name of any service in Ubuntu system autocompleted by typing service first_few_letters_of_service_name and pressing Tab button. When this does not work (and it does not work a lot) it creates a lot of confusion and rises lot of questions.

In Ubuntu 14.04, the script that handles completions for service command is /usr/share/bash-completion/bash_completion It looks for service names as files in /etc/rc.d/init.d, /etc/init.d, and in the output of systemctl list-units --full --all

Every package that provides a standard daemon using upstart is required to provide a symlink in /etc/init.d by Debian policy. If you have some homegrown upstart services having only configuration file in /etc/init you won’t have them in the autocompletion suggestions.

There are special upstart jobs in /etc/init that as well do not have a corresponding entry in /etc/init.d. These are an exception. From Debian Policy:

{% blockquote %} An exception to this rule is scripts or jobs provided by the init implementation itself; such jobs may be required for an implementation-specific equivalent of the /etc/rcS.d/ scripts and may not have a one-to-one correspondence with the init scripts. {% endblockquote %}

These exceptions do not currently work with bash-completion. However, you can use start, stop, restart and reload directly without service, and autocompletion will work. For example, sudo start shut correctly autocompletes. But you shouldn’t normally need to directly call upstart jobs that do not have a corresponding init.d entry.

Source: Askubuntu, One more thread