bash: ім'я змінної не розширюється із заповненням Tab


2

На віддаленому комп'ютері з версією bash "3.2.51 (1) -release" (ОС: SUSE Linux Enterprise Server 11.1 (x86_64)) я не зміг виконати звичайне заповнення вкладки зі змінною назвою. наприклад, я хотів би набрати:

echo $OLDPWD/

то в кінці косої риски я можу натиснути "Tab", і ім'я змінної буде розширено до старої назви каталогів (перед останньою cdабо pushdкомандою). Це працює у моєму власному ноутбуці (Debian 7, Bash 4.2.37 (1) -випуск). Чому в цій графічній оболонці SLES вона не працюватиме?

Так само, якщо я набираю

echo $OLDP

а потім натисніть "Tab" в кінці "P" там, баш завершив би це $OLDPWD. Це не відбудеться і в SLES 11 bash.

Які контрольні змінні (shopt? Set?), Які впливають на таку поведінку?


Чи працює Alt + $?
демуре

Ймовірно, у старшій версії bash не включені всі фантазійні функції завершення. Чи можете ви встановити bash-completionпакет на віддаленій машині?
glenn jackman

@glennjackman: bash-completionПакет пропонує набір обгортків навколо багатьох команд, які налаштовують поведінку завершення аргументів для цих команд. Це не впливає на заповнення змінних середовища. Ця можливість вбудована в більш пізні версії bash.
garyjohn

2
Чи встановлено $ OLDPWD? У моєму базі 4.2.25 це не визначено, поки ви не використали cdпринаймні один раз. Я не знаю, чи встановив bash 3.x $ OLDPWD, коли ви зробили CD. Чи завершується, скажімо, $ HOM <tab> до $ HOME?
Блукаюча логіка

до речі, я щойно знайшов у csh, якщо я встановив set zzz='~/some/dir', я не можу робити розширення вкладок для, cp $zzz +tabале якщо я визначу за set zzz=~/some/dir, я можу зробити розширення. Схоже, оболонка не може розширюватися після рядка в лапках.
Чан Кім

Відповіді:


4

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. Я не знаю, що вберегло б цього.


Як ми це робимо в csh? Я бачу "shopt: Command not found."
Чан Кім


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.