Ну ... я так растерялся, потому что единственная реальная проблема в моем случае - это чертов апостроф (').
Ситуация: расширение переменной PATH влияет на завершение слова, основываясь на том, был ли апостроф в дополнительном пути или нет.
Пример: У меня есть exe-файл (называемый «deadbeef») с соответствующими правами exe, путь которого содержит 2 апострофа:
/ home / mallniya / hard'n'soft / soft / gnu-linux / portable / deadbeef-0.6.0
Специально для эксперимента я поместил этот же файл в
/ home /mallniya/hardnsoftaa/soft/gnu-linux/portable/deadbeef-0.6.0
Если я экспортирую первый путь в переменную $ PATH, в bash не будет автозаполнения, но в второй случай. Когда я набираю в терминале первые буквы программы в экспортированном каталоге
dead [TAB]
В первом случае нет завершения, но когда я использую TAB с тем же Слово во втором условии - это работает.
Но если я наберу команду "deadbeef" в первом случае вручную - она также будет выполнена.
Более того, обе команды , которые и типа , сообщают, что exe-файл существует в обоих случаях.
Так в чем проблема ??? Зачем так обрабатывать апострофы?
Апострофы являются специальными символами почти для всех оболочек (оболочка - это термин, который относится к интерпретаторам командной строки, то есть к программе, которая читает то, что вы вводите, и указывает на соответствующую вещь).
Краткий ответ : не делай этого. Что касается пробелов, лучше избегать имен файлов со специальным значением или специальных символов в них.
Длинный ответ : если вы хотите использовать апострофы, вы должны « процитировать » их (используя специальные символы, которые мешают оболочке интерпретировать их). Автозаполнение будет заключать их в кавычки автоматически при необходимости ... Пример:
(0)samsung-romano:~/tmp/try% touch "hard'n'soft"
Один из способов заключить одинарные кавычки в двойные кавычки. (И наоборот, хотя это сложнее, чем это).
(0)samsung-romano:~/tmp/try% ls
hard'n'soft
Теперь, если он напишет cat hard
и нажмет TAB
:
(0)samsung-romano:~/tmp/try% cat hard\'n\'soft
Обратная косая черта - это еще одна форма цитирования следующего символа.
Ну, как советовала команда bash_completion, я сообщил об этом поведении команде bash, и они ответили:
«Спасибо за отчет. Это будет исправлено в bash-4.3.»
похоже, что ошибка уже известна, и мы должны просто подождать.
Чтобы расширить путь с апострофами, добавьте «перед путем».
cd "/home/mallniya/hard
расширяется без проблем в расширении табуляции.