10

I am not so into Linux and I have the following doubts: a client provided me an Ubuntu 18.04.3 LTS virtual machine which I access via SSH. (I am using MobaxTerm as SSH client but it should not be the problem.) The shell used is sh.

The problem is that in the shell the autocomplete function is not working as I expected using the Tab key.

It simply put the classical tab white spaces.

Why? How can I change this configuration?

Eliah Kagan
  • 117,780
AndreaNobili
  • 4,539
  • 10
  • 26
  • 36

2 Answers2

12

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.)

Eliah Kagan
  • 117,780
-1

fish shell will show you possible commands automatically. Pressing TAB will show all possible commands. Here is what I get from sudo ap + TAB:

shri@shri ~ [1]> sudo apt-get install pulseaudio-module-bluetooth
apt                                           (Command-line interface)
aptd               (Package managing daemon proving a D-Bus interface)
aptdcon                            (Command line client for aptdaemon)
aptitude                 (High-level interface to the package manager)
…and 16 more rows