我有两个安装了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存在,只有两个服务。 删除该目录后,一切工作正常。