为什么 su 后手册页完成失败?

为什么 su 后手册页完成失败?

我默认安装的是 Debian 8.1。我愿意

su
man apt<TAB>

但什么也没得到。当我以两种模式编写时,我确实看到了手册man apt-get:作为用户 mas 和 root。但是,制表符补全仅适用于用户模式。

如何在 root 中执行 man 之后启用表补全?为什么默认情况下禁用此功能?

答案1

运行su会在非登录模式下调用 bash。然后 Bash 读取.bashrc并配置其环境。

运行时su -会调用 bash 作为登录 shell。在此模式下,/etc/profile如果存在则执行。 Bash还会搜索~/.bash_profile并执行它找到的第一个文件。尽管没有记录,但它似乎在这些都不存在时执行。~/.bash_login~/.profile~/.bashrc

如果您得到不同的行为,则您可能正在使用不同的文件来初始化 bash,具体取决于 bash 的调用方式。

echo .bashrc我通过在现有文件的末尾添加类似的行来测试调用哪个文件。这将显示哪些配置被调用。

手册页的 INVOCATION 部分中有关于此行为的更多详细信息bash

制表符补全在 中可用bash,但在sh. root通常sh其外壳可能bash不可用。用户通常将其bash作为他们的外壳。

bash尝试像root尝试制表符完成之前一样运行。这应该启用制表符完成。

答案2

Bash 有两种补全引擎:一种是简单的引擎,主要只补全命令位置的命令和参数位置的文件名,另一种是奇特的引擎,它根据命令补全参数。为了完成手册页,您需要一个精美的手册页。

当您启动 bash 时,仅启用简单完成引擎。要获得精美的引擎,您需要获取/etc/bash_completion.这会改变历史行为并增加启动时间,这可能就是为什么这不是 bash 默认值的原因。

在 Debian 中,读取指令/etc/bash_completion存在于.bashrc新帐户的默认设置中,但不存在于系统配置文件中/etc/bash.bashrc。它不会放入系统配置文件中,因为这会使用户无法选择退出它。如果您希望 shell 中的奇特补全系统以 root 身份运行,则需要将此行添加到/root/.bashrc

. /etc/bash_completion

相关内容