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

Ну ... Я так смущен, потому что единственная реальная проблема в моем случае - это разбухание апострофа ('). Ситуация: расширение слова 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-файл существует в обоих случаях. Так в чем проблема??? Почему bash обрабатывает такие апострофы?

1
задан 4 February 2014 в 21:17

2 ответа

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

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

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

(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 

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

1
ответ дан 24 May 2018 в 12:12
  • 1
    Благодарим вас за ответ, и все ясно о том, как запретить оболочку интерпретировать специальные символы, пытаясь просто набрать ее, например, используя touch, ls и прочее. Нет проблем, я использую его с моим hard'n'sofr dir каждый день без спотыкания. Но мой вопрос связан с $ PATH и автозаполнением - я просто хочу знать, почему в этой точной ситуации bash не может выполнить команду, хотя он видит exe-файл, когда я использую путь с апострофами. – mallniya 4 February 2014 в 05:09

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

cd "/home/mallniya/hard

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

0
ответ дан 24 May 2018 в 12:12

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

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