Don’t Rely on Ubuntu 14.04 Service Autocomplition
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