Назад | Перейти на главную страницу

завершение табуляции для служебной команды в debian

У меня две системы с установленным debian squeeze. В одной системе, когда я печатаю:

service <TAB> 

он показывает мне все доступные услуги (из /etc/init.d)

в другой системе он показывает мне все файлы из текущего каталога. Кто-нибудь знает, какой параметр меняет это поведение?

ОБНОВИТЬ:

Файл /etc/bash_completion.d/service отсутствовал. Я скопировал его с машины, на которой он работает. Если я напечатаю complete -p | grep service он показывает мне:

complete -F _service service

На машине, где она не работает, эта команда ничего мне не показывает. Я казнил complete -F _service service в командной строке после этого команду service <TAB> показывает мне:

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

эта функция определена в служебном файле, который я недавно скопировал, по некоторым причинам ее нельзя найти ...

Прежде всего, проверьте, установлен ли 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 существовал и имел только две службы. После удаления этого каталога все работало нормально.