debian 上服务命令的选项卡完成

mar*_*kus 7 debian bash

我有两个安装了 debian 挤压的系统。当我键入时在一个系统上:

service <TAB> 
Run Code Online (Sandbox Code Playgroud)

它向我展示了所有可用的服务(来自 /etc/init.d)

在另一个系统上,它显示了当前目录中的所有文件。有谁知道哪个设置会改变这种行为?

更新:

文件 /etc/bash_completion.d/service 丢失。我从它正在工作的机器上复制它。如果我输入complete -p | grep service它会显示我:

complete -F _service service
Run Code Online (Sandbox Code Playgroud)

在它不工作的机器上,该命令不显示任何内容。我complete -F _service service在命令行中执行,之后,命令service <TAB>显示我:

service -su: completion: function `_service' not found
Run Code Online (Sandbox Code Playgroud)

这个函数是在我最近复制的服务文件中定义的,由于某些原因找不到...

rus*_*ush 20

首先检查是否安装了 bash-completion 运行:

 $ dpkg -l bash-completion | tail -1
Run Code Online (Sandbox Code Playgroud)

它应该输出如下内容:

ii  bash-completion  1:1.3-1  programmable completion for the bash shell
Run Code Online (Sandbox Code Playgroud)

如果输出为空,则安装它:

aptitude install bash-completion
Run Code Online (Sandbox Code Playgroud)

然后检查它是否启用:

 $ grep -A 2 bash_completion ~/.bashrc /etc/bash.bashrc
Run Code Online (Sandbox Code Playgroud)

应该输出类似的东西

~/.bashrc:if [ -f /etc/bash_completion ]; then
~/.bashrc:    . /etc/bash_completion
~/.bashrc:fi
Run Code Online (Sandbox Code Playgroud)

如果没有这样的内容或者它被​​注释(在#之后~/.bashrc:)然后添加/取消注释

if [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
fi
Run Code Online (Sandbox Code Playgroud)

到 ~/.bashrc 并用

. ~/.bashrc
Run Code Online (Sandbox Code Playgroud)

之后它应该可以正常工作。

  • 目录补全不是 bash_completion,这是 Debuntu 对 readline 库(这是 shell 用来...读取...行的)进行的一个丑陋的黑客攻击。bash_completion 未在第二个框上启用。 (2认同)