Как настроить автозаполнение 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)
1 ответ
Возможно нет. Или, по крайней мере, это будет действительно сложно. Проблема здесь в том, что foo=
bash интерпретирует как попытку установить переменную foo
к чему-то. Таким образом, когда вы нажимаете вкладку, он пытается дополнить имена файлов в текущем каталоге. Это на самом деле не завершает foo=
, это начинает совершенно новый шар из ничего. Обратите внимание, что для завершения требуется две вкладки foo=
,
Чтобы проиллюстрировать это, вы можете увидеть такое же поведение, даже если нет файлов, начинающихся с foo=
:
$ ls
bar baz
Typing foo=
и нажатие Tab приводит к:
$ foo= ## first tab does nothing
$ foo=
bar baz ## both file names are printed.
Я сомневаюсь, что будет какой-то способ обойти это, так как это основная функция оболочки и основной способ определения переменных.
Я могу придумать два обходных пути. Либо сбежать =
:
$ ls foo\= ## hit tab
$ ls foo\=bar
Или используйте кавычки:
$ ls 'foo= ## hit tab
$ ls 'foo=bar' ## yes, the final quote is added by the shell.
Нажатие Tab теперь будет правильно раскрывать имя файла.