Функция автозаполнения bash, похоже, не работает с переменными среды в 11.04. Текущее поведение указано ниже
export SCRIPT=/home/user/script
cd $SCRIPT/<tab>
приводит к добавлению обратной косой черты ( \
) перед $ SCRIPT
, т.е. подсказка становится
cd \$SCRIPT/
То же самое происходит, если cd
заменяется на ls
или любую другую команду
Кроме того, если в пути, содержащемся в $ SCRIPT, есть исполняемый файл, и я хочу запустить этот
$SCRIPT/<tab>
Bash не показать параметры внутри папки (независимо от того, есть ли один файл или несколько файлов / каталогов внутри пути, содержащегося в переменных среды).
Другими словами, автозаполнение не работает с переменными среды.
Для возвращения старого behaivior используйте команду
shopt -s direxpand
или включайте его в Ваш .bashrc
При использовании того же .bashrc с различными версиями удара использовать
if ((BASH_VERSINFO[0] >= 4)) && ((BASH_VERSINFO[1] >= 2))
then shopt -s direxpand
fi
После ввода переменной оболочки
cd $SCRIPT/
введите Ctrl-Alt-E. Это расширяет переменную
cd /home/user/script/
Это работает с EDITOR = vi в Fedora 16.
Обходной путь, предложенный в http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html :
<Tab>
для автоматического заполнения переменной окружения st Ваша командная строка говорит cd $MYVAR
<Esc>
+ <Ctrl>-E
, чтобы расширить текущую командную строку, т.е. заменить $MYVAR
ее значением, путь /
и затем наслаждайтесь автоматическим завершением <Tab>
как обычно Это предполагает, что вы находитесь в режиме emacs (set -o emacs
) и настроили bash_completion
для cd
(например, complete -o nospace -F _cd cd
).
К сожалению, это не работает в режиме vi (set -o vi
), потому что расширение командной строки тогда недоступно.
Эта ошибка была представлена в ударе 4.2. Существует долгий поток об этом здесь:
http://lists.gnu.org/archive/html/bug-bash/2011-02/msg00274.html
Короче говоря, Chet Ramey, разработчик удара, не уверен, как пойти о фиксации его все же.