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 otherbash
features. - You can change your user account's login shell to
bash
with thechsh
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
.)