Когда я начинаю вводить имя файла, который содержит знак равенства, автозаполнение с помощью [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)
Вероятно, нет. Или по крайней мере, это будет действительно сложно. Проблема здесь состоит в том, что 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.
Удар Вкладка теперь развернет имя файла правильно.