
Используя bash
эту систему:
Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u4 (29.02.2016) x86_64 GNU/Linux
Последовательность:
cd /tmp
touch test1.txt && touch test2.txt && touch test3.txt
ls test [tab][tab]
Шоу:
test1.txt test2.txt test3.txt
под командной строкой.
Именно такого bash
поведения я и ожидаю от автозаполнения.
Но когда я печатаю:
ls test* [tab][tab]
(ожидая того же результата) я получаю только (т.е. автозаполнение расширяется исключительно до):
test1.txt
Так что подстановочный знак звездочки ( *
) в конце делает test[23].txt
'unreachable'. Я почти уверен, что эти две последовательности давали те же результаты в предыдущих версиях bash — по крайней мере, на моем компьютере.
У кого-нибудь еще есть такая проблема? Это настройка по умолчанию (например, в Debian 8), которую можно изменить? (Я пробовал устанавливать и отменять различные параметры оболочки, но shopt
безрезультатно).
решение1
Ну, решение, которое работает для меня, следующее: у ~/.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
Я думал, что это блок, который отвечает за автодополнение. Но после того, как я его закомментировал и запустил новую оболочку, он не только заработал, но и вернулся к привычному для меня режиму!
Все еще не уверен, что if
означает это предложение, но я не буду пытаться исправить его, пока оно работает.