Подтвердить что ты не робот

Bash завершение для Maven экранирует двоеточие

Я добавил bash завершение для Maven после документов:

http://maven.apache.org/guides/mini/guide-bash-m2-completion.html

Все работает хорошо, за исключением целей, которые используют двоеточие. Например, вместо

mvn eclipse:eclipse

завершение выполнения двоеточия

mvn eclipse\:eclipse

Любые предложения, как это можно исправить? Я использую Ubuntu 8.10 (2.6.27-17-generic) и

$bash -версия
GNU bash, версия 3.2.39 (1) -release (i486-pc-linux-gnu)

4b9b3361

Ответ 1

Из Bash FAQ E13.

Сразу после команды complete в script, с которой вы связались, выполните эту команду, чтобы удалить двоеточие из списка символов разрыва слова завершения:

COMP_WORDBREAKS=${COMP_WORDBREAKS//:}

Ответ 2

Вот связанный вопрос и другое предлагаемое решение:

Как reset COMP_WORDBREAKS без выполнения другого завершения script?

Как указывалось ранее, самым простым решением является изменение COMP_WORDBREAKS. Однако изменение COMP_WORDBREAKS в вашем завершении script небезопасно (поскольку это глобальная переменная и имеет побочный эффект, влияющий на поведение других скриптов завершения), например scp).

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

Два вспомогательных метода были добавлены в Bash завершение 1.2 для этого:

  • _get_comp_words_by_ref с опцией -n EXCLUDE
    • получает слово до конца, не рассматривая символы в EXCLUDE как разрывы слов
  • __ltrim_colon_completions

Итак, вот основной пример того, как обрабатывать двоеточие (:) в словах завершения:

_mytool()
{
    local cur
    _get_comp_words_by_ref -n : cur

    # my implementation here

    __ltrim_colon_completions "$cur"
}
complete -F _mytool mytool

Использование вспомогательных методов также упрощает завершение script и гарантирует, что вы получите одинаковое поведение в любой среде (bash -3 или bash -4).

Вы также можете посмотреть сценарии завершения man или perl в /etc/bash_completion.d, чтобы узнать, как они используют вышеупомянутые вспомогательные методы для решения этой проблемы.

Ответ 3

Любые предложения, как это можно исправить? Я использую Ubuntu 8.10 (2.6.27-17-generic) и

Ответ Денниса определенно правильный.

Но для записи есть зарегистрированная проблема (MNG-3928), чтобы улучшить документацию об интеграции Maven с bash, Проблема связана с script, которая является улучшенной версией той, которая сейчас находится в сети, и просто работает. Возможно, вы захотите попробовать.

Лично я использую Bash Completion script от Ludovic Claude PPA (тот, который входит в пакет maven из Ubuntu), который я загружаю прямо с базара (ее e - прямая ссылка для скачивания в ревизию HEAD). Это просто потрясающе.

Ответ 4

Я бы пошел с файл завершения Maven2 Bash на willcodeforbeer.com.

  • отлично работает
  • обрабатывает двоеточия
  • не сбрасывает глобальную переменную COMP_WORDBREAKS (тем самым прерывая scp и т.д.)
  • легко редактировать и понимать

Надеюсь, что это поможет!