Why doesn't auto complete work in my shell?

Solution 1:

sh is provided by dash in Ubuntu. Many shells, including bash and zsh, have sophisticated features for easy interactive use. dash is deliberately quite minimal and does not offer such features. In particular, it does not offer tab completion.

Even stripped-down Ubuntu systems typically have bash installed because it is considered an essential package--we're supposed to be able to assume it is present even outside the case where another package depends on it. Typically bash is the default user shell on Ubuntu--that is, the login shell new users get by default--though this can be reconfigured.

I recommend you use bash or another shell that is nice to use interactively. You can see if bash is available in that VM by running:

bash

Assuming your $PATH is set reasonably, that will run bash if it is available. You can make sure that tab completion works in bash--it should, but there's no reason not to check--and then get tab completion in the future through one of two approaches:

  • You can just run bash when you want tab completion and other bash features.
  • You can change your user account's login shell to bash with the chsh command.

Note that there is a separate package called bash-completion which is also usually installed. This provides programmable tab completion--that is, tab completion that varies by context and, for example, knows about the flags and other syntax of commands. It's possible to have bash installed but not bash-completion.

(To find out if any particular package--bash, bash-completion, or anything else--is installed you can use apt list package-name. For more information about a package you can use apt show package-name and apt policy package-name.)