Bash не может расширять задники в интерактивном режиме

На RHEL5.2 (bash 2.3.25) я могу cd `pwd`/[TAB], и pwd подставляется в мой текущий рабочий каталог, используя вывод pwd(1).

Как мне добиться такой же функциональности в Ubuntu 9.10 (bash 4.0.33).

Я читал предыдущие вопросы, которые ссылаются на спины как старые и обесцененные. Я этого не знал. Я понимаю, что их вложение может быть трудным, и я использую сценарии ${} is, но я хотел бы иметь возможность интерактивно оценивать команды в оболочке.

3 ответа

Это особенность, а не ошибка.

Подумайте о сценарии следующим образом: чтобы выполнить это завершение, оболочка должна выполнить команду в обратных галочках. Это может привести к очень серьезным негативным последствиям, если это будет что-то, что не должно запускаться более одного раза, выполнение которого займет много времени и т. Д.

Чтобы выполнить расширение, bash нужна просто строка, представляющая собой путь, а не какая-то программа, которую нужно выполнить, чтобы завершить строку. Рассмотрим предложение по использованию ./ в качестве пути для настоящего рабочего каталога, а также рекомендуется!

Backticks не являются старыми или устаревшими, хотя более новые $() синтаксис обычно предпочтительнее в наши дни. Однако в вашем примере использование команды вообще не рекомендуется. Обратные метки и команды должны использоваться экономно и только тогда, когда другой синтаксис невозможен.

Пытаться

cd./TAB

вместо.

cd $VAR/...
cd $(cmd)/...

не работай для меня тоже. Может быть, вы можете сравнить файлы /etc/bash_completion.

Есть ситуации, когда вместо "./" требуется "$PWD/", поэтому не следует всегда предлагать использовать "./" вместо "$PWD/". Один из примеров - когда вы делаете символическую ссылку.

Предположим, вы в / somefolder. Теперь вы запускаете следующую команду:

ln -s ./file /target/file

Это становится неработающей ссылкой. Что вам действительно нужно сделать, это:

ln -s $PWD/file /target/file

Очень неэффективно набирать весь путь. Эта проблема не зависит от проблем "устаревания", так как символическая ссылка просто не работает таким образом. Таким образом, я предлагаю вам подать ошибку, чтобы решить эту проблему.

Другие вопросы по тегам