Заполнение клавишей Tab шаблонов оболочки

На моих серверах Debian я привык поражать Вкладку, чтобы "предварительно просмотреть" расширение шаблонов оболочки:

$ cp *some*<Tab>
something  somewhat  have-some-cake
$ cp *some*_

Когда шаблон расширяется до одной записи, Вкладка заменяет шаблон фактической записью; иначе это показывает список соответствия записям. Это интуитивно и полезно, потому что это согласовывается с регулярным заполнением клавишей Tab "префикса".

Но мои серверы Ubuntu и рабочие столы ведут себя по-другому: даже когда это расширилось бы больше чем до одной записи, Вкладка заменяет шаблон первой записью.

Я проверил обычных подозреваемых (/etc/bash.bashrc,/etc/inputrc, и локальные версии), и я не мог найти различие.

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

5
задан 7 December 2016 в 09:25

2 ответа

Обратное другой ответ, этой конкретной проблемой является, вероятно, прямой результат использования завершения удара. Пакет завершения удара имеет несколько ошибок (как отмечено в этом ответе U&L о подобной проблеме, например).

Если я комментирую этот раздел в моем .bashrc:

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
  if [ -f /usr/share/bash-completion/bash_completion ]; then
    . /usr/share/bash-completion/bash_completion
  elif [ -f /etc/bash_completion ]; then
    . /etc/bash_completion
  fi
fi

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

$ echo *o*<tab><tab>
foo     food    foo.sh  
$ echo *o*

И затем если я получаю /usr/share/bash-completion/bash_completion сценарий как он был в .bashrc:

$ . /usr/share/bash-completion/bash_completion
$ echo foo

*o* был сразу автоматически заполнен к foo не показывая другие соответствия.

Я использую 16.04, между прочим. Я не знаю, было ли это зафиксировано в более новых выпусках.

$ dpkg-query --show --showformat='${Package} ${version}\n' bash bash-completion
bash 4.3-14ubuntu1.2
bash-completion 1:2.1-4.2ubuntu1.1
1
ответ дан 23 November 2019 в 10:41

Более умное заполнение клавишей Tab в Bash требует bash-completion пакет.

sudo apt install bash-completion

Завершение Bash на самом деле пишется и сохраняется Debian непосредственно.
(См. также его пакет Debian и страницы пакета Ubuntu.)

После того как это установлено, это любой загружается автоматически (например, через /etc/bash.bashrc) или иначе необходимо будет дать Bash команду загружать его в Вашем ~/.bashrc со строкой файла конфигурации как это:

if [[ -z "$BASH_COMPLETION" ]] && [[ -r /etc/bash_completion ]]; then
  . /etc/bash_completion
fi

Прежде чем Red Hat и другие включали этот пакет, я раньше вручную копировал /etc/bash_completion* между системами. Это будет работать вполне хорошо, но я не предлагаю это; это также отключает возможность для Вашего диспетчера пакетов, чтобы обновить существующие завершения и установить новые (которые теперь входят /usr/share/bash-completion/completions/ хотя они первоначально жили с Вашими пользовательскими завершениями в /etc/bash_completion.d/).

0
ответ дан 23 November 2019 в 10:41

Другие вопросы по тегам:

Похожие вопросы: