在debian上的服务命令的标签完成

我有两个安装了debian squeeze的系统。 在我input的一个系统上:

service <TAB> 

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

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

更新:

文件/etc/bash_completion.d/service丢失。 我从它正在工作的机器复制它。 如果我inputcomplete -p | grep service complete -p | grep service给我看:

 complete -F _service service 

在没有工作的机器上,这个命令什么都不显示。 我在命令行中执行complete -F _service service ,之后,命令service <TAB>显示我:

 service -su: completion: function `_service' not found 

这个函数是在我最近复制的服务文件中定义的,由于某些原因无法find…

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

  $ dpkg -l bash-completion | tail -1 

它应该输出像这样的东西:

 ii bash-completion 1:1.3-1 programmable completion for the bash shell 

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

 aptitude install bash-completion 

然后检查是否启用:

  $ grep -A 2 bash_completion ~/.bashrc /etc/bash.bashrc 

应该输出类似的东西

 ~/.bashrc:if [ -f /etc/bash_completion ]; then ~/.bashrc: . /etc/bash_completion ~/.bashrc:fi 

如果没有像这样或它被评论(有#~/.bashrc:然后添加/取消注释

 if [ -f /etc/bash_completion ]; then . /etc/bash_completion fi 

到〜/ .bashrc并重新读取它

 . ~/.bashrc 

之后,它应该工作正常。

我有同样的问题,但“标签”只显示了许多服务中的两个。 看看/ usr / share / bash-completion / bash_completion,你可以看到:

 _sysvdirs() { sysvdirs=( ) [[ -d /etc/rc.d/init.d ]] && sysvdirs+=( /etc/rc.d/init.d ) [[ -d /etc/init.d ]] && sysvdirs+=( /etc/init.d ) # Slackware uses /etc/rc.d [[ -f /etc/slackware-version ]] && sysvdirs=( /etc/rc.d ) } 

在我的情况下,/etc/rc.d/init.d存在,只有两个服务。 删除该目录后,一切工作正常。