завершение bash предотвращает возврат - PullRequest
2 голосов
/ 13 сентября 2010

Я пытаюсь настроить завершение bash для написанного мной служебного скрипта, поэтому я добавил следующий скрипт в /etc/bash_completion.d:

_mcd()
{
    local cur words
    COMPREPLY=()

    cur="${COMP_WORDS[COMP_CWORD]}"
    words=`mcd-completion-words`
    COMPREPLY=( $(compgen -W "${words}" -- "$cur") )
    return 0
}
complete -F _mcd mcd

Сценарий mcd-completion-words программно находит доступные операторыдля команды.Когда я перезапускаю bash (или создаю исходный код скрипта), я могу успешно завершить табуляцию, но если я это сделаю, я больше не смогу вернуться назад после завершенного символа.

Кроме того, если я попытаюсь перечислить все опции (например,Я пытаюсь завершить табуляцию без слов), bash добавляет к команде табуляцию, которую я тоже не могу вернуть.

Как сделать так, чтобы bash имитировал нормальное поведение завершения файла?Любая помощь приветствуется.Спасибо!


Вот сокращенный тестовый пример для mcd-creation-words, который все еще демонстрирует то же поведение.Любопытно, что дело Денниса также работает и для меня (например, при подстановке словами = «один два три»).

#!/usr/bin/env php
<?php

print "one two three four five six seven eight nine";

1 Ответ

1 голос
/ 14 сентября 2010

Вот сокращенный контрольный пример;даже пустая команда `php 'вызывает ошибочное поведение завершения:

$ _mcd() { php -r ""; COMPREPLY=( one ); }
$ complete -F _mcd mcd
$ mcd <TAB>            # Becomes 'mcd one' all right
$ mcd one <BACKSPACE>  # ERROR: doesn't work

Это на машине (Ubuntu) с обоими bash-3.2.48 / bash-4.0.33 и php-5.2.6-3ubuntu4,На другом компьютере (Debian) с bash-3.2.39 и php-5.2.6-1 + lenny9 завершение и возврат завершаются хорошо.

Использование perl -e "" вместо php -r "" также работает нормально.

Не знаете, что происходит, php конфликтует с readline?Может быть, вы можете попробовать список рассылки bug-bash?

...