使用 sudo 时参数的 Bash 补全

mas*_*sgo 5 bash sudo centos autocomplete

我正在使用 CetnOS 6 并希望在使用sudo.

我发现这个问题https://superuser.com/questions/804128/bash-hints-does-not-work-after-sudo-or-man现在以下有效:

  • yu[tab]完成yum并使用另一个选项卡按下它会建议不同的 yum 命令
  • yum upg[tab]yum upgrade根据需要自动完成
  • sudo yu[tab]sudo yum按预期自动完成
  • sudo yum upg[tab] 不会自动完成任何事情,也没有建议。

即使使用sudo,我如何实现参数完成?

(我yum只是举个例子,因为它在所有 CentOS 上都可用;其他命令的结果是一样的。)


关于我的系统的一些信息:

$ uname -a
Linux server 2.6.32-642.6.1.el6.x86_64 #1 SMP Wed Oct 5 00:36:12 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

$ bash --version
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)

$ yum list installed | grep completion
bash-completion.noarch  1:1.3-7.el6        @epel

$ cat .bashrc
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions
complete -cf sudo
Run Code Online (Sandbox Code Playgroud)

Rob*_*nny 1

这不是完美的解决方法,但您可以添加complete -cf sudo到您的.bashrc其中,它将自动完成 sudo 命令。

然而,这样做时,它的行为不会与正常的制表符完成完全一样。例如,如果您要使用它,那么sudo cd [tab]您将得到很多无用的可能性 - 即文件名将显示...谁想要 cd 到文件?

但在大多数情况下,它会完成类似的命令sudo yum upd[tab]