У меня в командной строке это:
ln -sf $PWD/wine-
и затем я нажимаю, Tabчтобы завершить имя файла. В более ранних версиях 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
решение1
Я обнаружил, чтоверсии 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 tab?»gnu.bash.ошибка. Прочитав их, я нашел информацию здесь.
решение2
shopt -u progcomp
Это исправило проблему для меня, а также удалило множество «интеллектуальных» опций завершения, которые, как я обнаружил, мешают, не завершая файлы, которые, как я знаю, там есть, потому что эта тупая штука думает, что я не хочу, чтобы они были аргументами для определенной команды. ARRRGH
решение3
найдите _filedir()
в скрипте bash_completion верхнего уровня и измените строку
compopt -o filenames 2>/dev/null
к
compopt -o filenames -o noquote 2>/dev/null
решение4
Для тех (вроде меня) с 12.04 можно использовать ~+ вместо $PWD...
например :
cd /bin
echo ~+/ls
/bin/ls