bash: имя переменной не раскрывается при автодополнении Tab

bash: имя переменной не раскрывается при автодополнении Tab

На удаленном компьютере с 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"

Связанный контент