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

Léo*_* 준영 3 bash root debian su autocomplete

我有一个默认的 Debian 8.1 安装。我愿意

su
man apt<TAB>
Run Code Online (Sandbox Code Playgroud)

但什么也得不到。当我man apt-get以两种模式编写时,我确实看到了手册:作为用户 mas 和作为 root。但是,选项卡完成仅适用于用户模式。

如何在 root 后启用表完成?为什么默认情况下禁用此功能?

Bil*_*hor 8

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

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

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

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

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

Tab 补全在 中可用,bash但在中不可用shroot通常有sh它的外壳,因为它bash可能不可用。用户通常有bash作为他们的外壳。

尝试bashroot尝试 tab-completion 之前一样运行。这应该启用选项卡完成。

  • root 的 shell 是 bash,在 Debian 8 中。如果你使用 `su -` 完成,就像 Mark Plotnick 建议的那样。 (2认同)
  • 这并不能解决问题,而且在很多方面都是错误的。在默认的 Debian 安装中,root 的 shell 是 bash(我认为所有 Debian 版本都是如此)。登录 shell 不会读取“.bashrc”(rshd 或 sshd 调用的非交互式登录 shell 除外,但不会读取“.profile”及其同类)。 (2认同)