使用sudo进行人性化的bash自动完成

时间:2017-08-06 13:03:31

标签: linux bash autocomplete sudo bash-completion

我的系统是基于Arch Linux的Manjaro Linux,我使用bash和bash-completion

当我输入常规用户(无sudo

时,它的效果非常好
$ rfkill <TAB><TAB>
block    event    help     list     unblock 

但是当我用sudo输入

$ sudo rfkill <TAB><TAB>
Display all 3811 possibilities? (y or n)

显然,它会尝试完成sudo命令,但我希望它能完成rfkill

我知道我可以通过编辑/usr/share/bash-completion/completions/sudo文件来改变这种行为,但我不知道如何说如果第二个单词不是sudo的标志,那么使用完成来表示下一个单词

你有吗?

UPD:我在虚拟机中测试Ubuntu 16.04,我看到它按预期工作。我将检查ubuntu的/usr/share/bash-completion/completions/sudo文件与我的文件之间的区别,如果有的话。

UPD2 :这些文件之间存在一些镜像(无意义)差异,无论如何都没有帮助。我有更多的想法来测试...

2 个答案:

答案 0 :(得分:1)

我遇到了完全相同的问题(运行Manjaro),并在Manjaro论坛(Source)中找到了解决方案:

  1. 通过检查bash-completion是否存在来确保实际上已安装/usr/share/bash-completion/bash_completion。如果没有使用pacman -S bash-completion
  2. 安装
  3. 请确保您的~/.bashrc文件中的complete -cf sudo已被注释掉。否则,这将使sudo仅自动完成文件名和命令,而不会使用bash-completion。

我希望这可以帮助您解决问题

答案 1 :(得分:0)

使用双标签:

sudo rfkill <TAB><TAB>

<强> UPD

如果没有该行,请将其添加到您的.bashrc

complete -cf sudo