我默认安装的是 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