Странное поведение автозаполнения

Ну ... я так растерялся, потому что единственная реальная проблема в моем случае - это чертов апостроф (').
Ситуация: расширение переменной 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
задан 4 February 2014 в 19:17

3 ответа

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

Краткий ответ : не делай этого. Что касается пробелов, лучше избегать имен файлов со специальным значением или специальных символов в них.

Длинный ответ : если вы хотите использовать апострофы, вы должны « процитировать » их (используя специальные символы, которые мешают оболочке интерпретировать их). Автозаполнение будет заключать их в кавычки автоматически при необходимости ... Пример:

(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 

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

0
ответ дан 4 February 2014 в 19:17

Ну, как советовала команда bash_completion, я сообщил об этом поведении команде bash, и они ответили:
«Спасибо за отчет. Это будет исправлено в bash-4.3.»
похоже, что ошибка уже известна, и мы должны просто подождать.

0
ответ дан 4 February 2014 в 19:17

Чтобы расширить путь с апострофами, добавьте «перед путем».

cd "/home/mallniya/hard

расширяется без проблем в расширении табуляции.

0
ответ дан 4 February 2014 в 19:17

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

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