На удаленном компьютере с bash версии "3.2.51(1)-release" (ОС: SUSE Linux Enterprise Server 11.1 (x86_64)) я не смог выполнить обычное автодополнение с помощью клавиши Tab для имени переменной. Например, я хотел бы ввести:
echo $OLDPWD/
затем в конце слеша я могу нажать «Tab», и имя переменной будет расширено до старого имени каталога (перед последней командой cd
или pushd
). Это работает на моем собственном ноутбуке (Debian 7, Bash 4.2.37(1)-release). Почему в этой оболочке SLES bash это не работает?
Аналогично, если я наберу
echo $OLDP
и затем нажмите "Tab" в конце "P", bash завершит это до $OLDPWD
. Этого не произойдет и в SLES 11 bash.
Какие контрольные переменные (shopt? set?) влияют на это поведение?
решение1
shopt -s direxpand
сделает echo $HOME/<tab>
расширение echo /home/matt/
в bash 4.2. В bash 4.1 это должно быть по умолчанию.
Я считаю, что это bash-completion
может действительно все испортить. Я всегда либо удаляю bash-completion
, либо запускаю, complete -r
чтобы убедиться, что отдельные правила завершения не делают ничего глупого с завершениями по умолчанию.
Если $OLDPWD
действительно установлено, то echo $OLDP<tab>
должно расшириться до echo $OLDPWD
. Я не знаю, что может помешать этому произойти.
решение2
Попробуйте C-x $
вместо TAB
этого явно запросить возможные переменные (а не что-то еще) дополнения.
решение3
Проверьте ответ на urxvt - вкладка развернуть переменные средыДмитрий Александров.
«Речь идет о опции direxpand.
$ shopt -s direxpand и $FOO_PATH/
будет расширено TAB"