Завершение Bash предотвращает возвращение

StackOverflow https://stackoverflow.com/questions/3701226

  •  02-10-2019
  •  | 
  •  

Вопрос

Я пытаюсь настроить завершение 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 (или исходный скрипт), я могу успешно вкладить завершено, но если я это сделаю, я больше не могу отступить в последнее время завершенного персонажа.

Кроме того, если я попытаюсь перечислить все варианты (например, я пытаюсь вкладывать вкладку W / No Word на месте), Bash добавляет вкладку в команду, которую я также не могу отступить.

Как я могу заставить Bash Mimic Normal File Completion поведение файлов? Любая помощь ценится. Спасибо!


Вот уменьшенный тест-тест для MCD-завершения - слов, которые по-прежнему проявляют одно и то же поведение. Кейс любопытно, черт Денниса также работает для меня (при замене словами = «один два три», например).

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

print "one two three four five six seven eight nine";
Это было полезно?

Решение

Вот уменьшенный тестовый случай; Даже пустая команда `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, Завершение и Backspace идут в порядке.

С использованием perl -e "" вместо php -r "" Также идет все в порядке.

Не знаю, что происходит, PHP противоречит с помощью readline? Может быть, вы можете попробовать список рассылки Bug-Bash?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top