У меня есть это в командной строке:
ln -sf $PWD/wine-
, а затем я нажимаю tab kbd>, чтобы завершить имя файла. В более ранних версиях Ubuntu это работало просто отлично, чтобы завершить имя файла wine-
(и как побочный эффект $PWD
был бы расширен в то время). Но теперь он превращается в
ln -sf \$PWD/wine-
, что совсем не то, что я имел в виду, и ничего не завершает, поскольку файл буквально не начинается с $
.
Как мне вернуться к менее нарушенному поведению?
set
говорит мне, что это мои текущие настройки:
BASHOPTS=checkwinsize:cmdhist:expand_aliases:extquote:force_fignore:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath
SHELLOPTS=braceexpand:emacs:hashall:histexpand:history:interactive-comments:monitor
Я обнаружил, что версии bash> = 4.2.29 имеют новую настройку direxpand
shopt. (См. man docs / bash.1
, если вы проверяете новый bash, или bash.1 из строки 8951 )
Если используется Quantal Quetzal 12.10 или иначе из (или проверяет и строит) новый bash, затем:
shopt -s direxpand
Дает мне поведение, которое я хочу, нуждаюсь и люблю.
Решение: пока что Ctrl + Alt + E вместо Tab тоже делает то, что я хочу. Но это неудобно.
Кстати, есть несколько тем, которые называются "вопрос о расширении переменных вкладки bash?" в gnu.bash.bug . Прочитав их, я нашел здесь информацию.
search _filedir ()
в скрипте bash_completion верхнего уровня и измените строку
compopt -o filenames 2>/dev/null
на
compopt -o filenames -o noquote 2>/dev/null
Даже с обновленным bash я обнаружил, что $
по-прежнему экранируется.
] bash-completion (1: 2.1-3.fc20)
пакет / etc / bashrc
из ~ / .bashrc
, похоже, исправило это. Я подозреваю, что теперь мне не хватает некоторых функций, к которым я обычно привык, но пока ничего не заметил.
Альтернатива (по крайней мере для Fedora 26), добавить export BASH_COMPLETION_VERSINFO = 0
перед поиском источника / etc / bashrc
. Это заставляет проблемный сценарий думать, что он уже получен.
Я столкнулся с той же проблемой с Bash в Cygwin. Я исправил свою проблему, установив следующий параметр.
shopt -s cdable_vars
http://www.gnu.org/software/bash/manual/html_node/The-Shopt-Builtin.html
Для тех (как я) с 12.04 может использовать ~ + вместо $ PWD ...
например:
cd /bin
echo ~+/ls
/bin/ls
Отключение опции оболочки 'complete_fullquote' делает работу:
shopt -u complete_fullquote
shopt -u progcomp
Это исправило это для меня, а также удалило множество "интеллектуальных" вариантов завершения, которые, как я обнаружил, мешают завершению файлов, которые, как я знаю, есть, потому что эта глупая штука думает, что я не хочу, чтобы они использовались в качестве аргументов для конкретной команды. ARRRGH
В GNU bash версии 4.2.46 (2) -release параметры complete_fullquote
и noquote
недоступны. Параметр cdable_vars
работает только на cd
; direxpand
расширяет переменную.
Что лучше всего сработало для меня:
shopt -u progcomp
Он работал с другими командами, кроме cd
, сохраняя переменные вместо их расширения.