Ну... Я совсем запутался, потому что единственная реальная проблема в моем случае — это чертов апостроф (').
Ситуация:Расширение переменной 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 не будет автодополнения, но будет во втором случае. Когда я ввожу в терминале первые буквы программы в экспортированном каталоге
мертвый[TAB]
В первом случае нет завершения, но когда я использую TAB с тем же словом во втором условии - это работает.
Но если я ввожу команду "deadbeef" в первом случае вручную - это тоже выполняется.
Более того, обакоторыйитипкоманды говорят, что exe-файл существует в обоих случаях.
Так в чем проблема??? Почему bash обрабатывает апострофы таким образом?
решение1
Апострофы являются специальными символами почти для всех оболочек (термин shell относится к интерпретаторам командной строки, то есть программам, которые считывают то, что вы вводите, и преобразуют это в соответствующее значение).
Короткий ответ: не делайте этого. Что касается пробелов, лучше избегать имен файлов со специальным значением или специальных символов в них.
Длинный ответ: если вы хотите использовать апострофы, вам нужно "цитировать" их (используя специальные символы, которые не позволяют оболочке интерпретировать их). Автодополнение автоматически заключит их в кавычки, когда это необходимо... Пример:
(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
Обратная косая черта — это еще одна форма цитирования следующего символа.
решение2
Ну, как и посоветовала команда bash_completion, я сообщил об этом поведении команде bash, и их ответ таков:
«Спасибо за сообщение. Это будет исправлено в bash-4.3».
похоже, ошибка уже известна, и нам следует просто подождать.
решение3
Чтобы расширить путь, содержащий апострофы, добавьте « перед путем.
cd "/home/mallniya/hard
без проблем расширяется при расширении вкладок.