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