Как настроить автозаполнение bash для работы с именами файлов, такими как «./foo=bar/x=y.txt»?

Когда я начинаю вводить имя файла, который содержит знак равенства, автозаполнение с помощью [tab] показывает странное поведение:

ls ./foo[tab]    # autocompletion to "./foo\=bar"         <- ok
ls ./foo=[tab]   # autocompletion to "./foo=foo\=bar/"    <- not ok

Есть ли что-то, что я могу вставить в .bashrc, чтобы контролировать это поведение или изменить некоторые сценарии автозаполнения в / etc?

bash --version
GNU bash, version 4.2.25(1)-release (x86_64-pc-linux-gnu)
2
задан 3 May 2016 в 12:35

1 ответ

Вероятно, нет. Или по крайней мере, это будет действительно сложно. Проблема здесь состоит в том, что foo= интерпретируется ударом как попытка установить переменную foo на что-то. Так, при ударе вкладки , она пытается вместе с названиями файлов в текущем каталоге. Это на самом деле не завершается foo=, это ни с чего запускает совершенно новый шарик. Обратите внимание, что требуется две вкладки для завершения foo=.

Для иллюстрирования Вы видите то же поведение, даже при отсутствии файлов, запускающихся с foo=:

$ ls
bar  baz

Ввод foo= и нажатие Вкладка приводит к:

$ foo= ## first tab does nothing
$ foo= 
bar          baz  ## both file names are printed. 

я сомневаюсь, там будет любым путем вокруг этого, так как это - основная функция оболочки и основного способа определить переменные.

я могу думать о двух обходных решениях. Любой Escape =:

$ ls foo\=  ## hit tab
$ ls foo\=bar 

Или кавычки использования:

$ ls 'foo=     ## hit tab
$ ls 'foo=bar' ## yes, the final quote is added by the shell. 

Удар Вкладка теперь развернет имя файла правильно.

0
ответ дан 3 May 2016 в 22:35
  • 1
    Хм... Я не могу решить загадку, но возможно Вы стремились бы протестировать статический двоичный файл, если я делаю ее доступной для скачивания? Я предполагаю, что Вы используете установку на 64 бита... – andrew.46 25 October 2017 в 15:52

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

Похожие вопросы: