为什么我的 shell 中自动完成功能不起作用?

为什么我的 shell 中自动完成功能不起作用?

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

问题是,在 shell 中,自动完成功能无法像我预期的那样使用该Tab键工作。

它只是放置了经典的制表符和空格。

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

答案1

shdash由Ubuntu提供。许多 shell(包括bashzsh)都具有复杂的功能,便于交互使用。dash故意设计得非常简约,不提供此类功能。特别是,它不提供制表符补全功能。

即使是精简版的 Ubuntu 系统通常也会bash安装它,因为它被视为必不可少的软件包——我们应该能够假设它存在,即使没有其他软件包依赖它。通常bash是 Ubuntu 上的默认用户 shell——即新用户默认获得的登录 shell——尽管可以重新配置。

我建议你使用bash或其他适合交互使用的 shell。你可以bash运行以下命令查看该 VM 中是否可用:

bash

假设您的$PATH设置合理,则bash在可用时将运行。您可以确保制表符补全功能有效bash(应该可以,但没有理由不检查),然后通过以下两种方法之一在将来获得制表符补全功能:

  • bash当您需要制表符完成和其他bash功能时,只需运行即可。
  • bash您可以使用以下命令将您的用户帐户的登录 shell 更改为chsh

请注意,还有一个单独的软件包,bash-completion通常也会安装。它提供可编程的制表符补全 - 即根据上下文变化的制表符补全,例如,了解命令的标志和其他语法。可能已bash安装但未安装bash-completion

(要查明是否安装了任何特定的软件包bash--、bash-completion或其他任何软件包,您可以使用。有关软件包的更多信息,您可以使用和。)apt list package-nameapt show package-nameapt policy package-name

答案2

fish shell 会自动显示可能的命令。按TAB将显示所有可能的命令。以下是我从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

相关内容