为什么在我的 shell 中不能自动完成工作?

And*_*ili 7 command-line auto-completion dash-shell sh

我不太喜欢 Linux,我有以下疑问:客户端为我提供了一个 Ubuntu 18.04.3 LTS 虚拟机,我可以通过 SSH 访问它。(我使用 MobaxTerm 作为 SSH 客户端,但这应该不是问题。)使用的 shell 是sh.

问题是在 shell 中,自动完成功能没有像我预期的那样使用Tab密钥工作。

它只是简单地放置了经典的制表符空格。

为什么?如何更改此配置?

Eli*_*gan 9

shdashUbuntu提供。许多外壳程序,包括bashzsh,都具有易于交互使用的复杂功能。dash故意非常小,并且不提供此类功能。特别是,它不提供制表符补全。

即使是精简的 Ubuntu 系统通常bash也会安装,因为它被认为是必不可少的包——我们应该能够假设它甚至在另一个包依赖它的情况之外也存在。通常bash是 Ubuntu 上的默认用户 shell——即默认情况下新用户获得的登录 shell——尽管这可以重新配置。

我建议您使用bash或其他易于交互使用的 shell。您可以bash通过运行以下命令查看该 VM 中是否可用:

bash
Run Code Online (Sandbox Code Playgroud)

假设您$PATH的设置合理,bash如果可用,它将运行。您可以确保选项卡完成工作bash- 它应该,但没有理由不检查 - 然后在将来通过以下两种方法之一获得选项卡完成:

  • 您可以bash在需要选项卡完成和其他bash功能时运行。
  • 您可以bash使用该chsh命令将您的用户帐户的登录 shell 更改为。

请注意,bash-completion通常还会安装一个名为的单独包。这提供了可编程的制表符补全——即根据上下文而变化的制表符补全,例如,知道命令的标志和其他语法。可能已经bash安装但没有安装bash-completion

(要确定任何特定package-- bashbash-completion或其他任何东西-安装就可以使用。有关一个包,你可以使用更多的信息和。)apt list package-nameapt show package-nameapt policy package-name