Рейтинг:1

Вкладка Bash не автозаполняет папки области node_module, начинающиеся с @ (в символе)

флаг in

У меня следующее странное поведение: существует следующая папка @fortawesome

Но когда я нажимаю

компакт-диск

ни одна из папок, начинающихся с "@", не появляется. Почему это происходит / как я могу исследовать это подробнее?

флаг cn
доказательство того, что вы используете BASH :-) 2 файла и 1 каталог, начинающиеся с @, и автозаполнение bash БУДЕТ выбирать каталог, когда вы выполняете `cd {tab}`. `touch @1 @2 && mkdir @5 && ls @1 @2 @5` и `cd {tab}` делает его `cd @5/`
Nate T avatar
флаг it
@Rinzwind Подтверждено: я только что протестировал 20.04.2 (версия bash 5.0.17 (1)). Он отображает мой тестовый каталог `~/@hello`, но игнорирует символ @ при определении порядка сортировки. Мой был в разделе «_H_».
Nate T avatar
флаг it
@OP, что вы подразумеваете под папкой области node_module? Как в пакете узла?
partizanos avatar
флаг in
Я думаю, это потому, что @ — это специальный символ в bash. @Rinzwind echo "$SHELL" показывает /бин/баш
partizanos avatar
флаг in
@NateT Я думал, что проблема могла быть связана с тем фактом, что это был пакет с областью действия nod_modules (по соглашению это папки, имена которых начинаются с символа @)
partizanos avatar
флаг in
@Rinzwind, кроме того, когда вы не пишете @ просто вкладку cd, она будет при переходе в папку @5, но если вы напишете `cd @5tab`, тогда нет
флаг cn
главное у вас все получилось ;-)
Рейтинг:1
флаг in

Поскольку @ - это специальный символ, добавление обратной косой черты в начале решило проблему. т.е. компакт-диск \@вкладка при этом автодополнение правильно имен папок.

Nate T avatar
флаг it
Мой bash показывает это независимо. Какая у вас версия? `баш --версия`. Ярлык не работает. Он печатает ввод из .bashrc
partizanos avatar
флаг in
Моя версия bash из `bash --version` — 5.0.17(1)-релиз (x86_64-pc-linux-gnu). Какой ярлык вы имеете в виду?
Nate T avatar
флаг it
Купить ярлык, я просто имел в виду использование сокращения для параметра --version, например `bash - v`. У нас точно такая же версия bash. Это должна быть другая программа, заставляющая вашу оболочку изменять свое поведение. Вопрос в том, какая программа и как именно модифицирует. Удалось ли вам проверить значение BASHOPTS? Команда просто `echo $BASHOPTS`
Nate T avatar
флаг it
Если вы добавите его значение к своему вопросу, мы сможем сравнить его с моим значением и, возможно, получить представление о том, что происходит. Это должен быть массив.
partizanos avatar
флаг in
`echo $BASHOPTS` выводит `checkwinsize:cmdhist:complete_fullquote:expand_aliases:extquote:force_fignore:globasciiranges:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath`
Рейтинг:1
флаг it

Если вы не создали каталог с помощью системы Linux, есть вероятность, что bash завершится, и поэтому bash не увидит его как файл.

Каталог в Linux — это просто файл. который содержит метаданные, в том числе расположение файлов, которые находятся «в нем». Это сильно отличается от того, как это делает Windows.

Если модуль (при условии, что это модуль узла) получен из npm, есть большая вероятность, что он был создан файловой системой NTFS.

Я не уверен, как это повлияет на то, как это видит завершение bash, но если оно не отображается, это, вероятно, причина.

Как я могу исследовать это больше.

Чтобы убедиться, что каталог все еще там, вы можете просто CD внутри него. В любом случае, это даст вам больше информации. Кроме того, запустить лс -а ~ или же ла ~ если он у вас есть.

Вы также должны создать новую папку с тем же соглашением об именах, чтобы увидеть, есть ли у нее такая же проблема.

Кроме того, есть инструмент, который вы можете получить от apt под названием дерево. Это похоже на ls, но рекурсивно. Он выведет всю структуру каталогов текущего каталога.

Чтобы убедиться, что Linux правильно «принял» каталог, вы можете проверить разрешения.

ла-а-н

Обратите внимание на самый первый символ в списке виновника каталога. Это должно быть «д». Если это «-», то это вообще не папка. Теперь это файл для ОС, что, вероятно, означает, что все внутри стирается.

Это также покажет информацию о владельце и группе. Если у него есть все эти атрибуты, то он обязательно должен появиться.

В этом случае повторно запустите описанные выше процессы и сделайте скриншот результата каждого из них. Если вы добавите их к своему вопросу, я гарантирую, что кто-то узнает, что происходит.

РЕДАКТИРОВАТЬ:

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

(Ubuntu = версия 20.04.2 -- bash = выпуск версии 5.0.17)

сделав @тестовое задание каталог и проверка результатов выполнения различных команд и приложений в одном и том же родительском каталоге. Я сделал это до того, как ты обнаружил, что можешь избежать этого. Проблема в том, что все они работали, как и ожидалось для меня.

Если это случилось с вами, и вы используете довольно актуальную версию Ubuntu, то, несомненно, у других будет такая же проблема.

На данный момент я вижу две основные причины расхождения. Либо мы каким-то образом столкнулись с каким-то странным граничным условием, которое еще никто не обнаружил (настолько маловероятно, что я чувствую себя немного смущенным, просто набрав его... XD), либо другая программа в вашей системе меняет поведение оболочки.

Как я намекнул в комментариях, это возможно с помощью манипуляций со средой оболочки. Есть несколько переменных среды (в моей среде 20.04 их 11), которые начинаются с шаблона БАШи указать непосредственно на атрибуты оболочки bash. Их очень легко определить, так как все они находятся в самом начале списка, отображаемого при запуске программы. установлен команда. Если вы пропустите через меньше, как в:

набор | меньше

они будут первым, что вы увидите на дисплее терминала. Хотя большинство из них предназначены просто как константы для предоставления доступа к информации в ваших сценариях и т. д. и отображения содержащейся информации (например, BASH_VERSION), другие могут управлять информацией, на которую они ссылаются. Одна такая переменная, которая выделяется для меня, это БАШОПТЫ. Если поведение на самом деле является результатом значения переменной, это будет довольно хорошим кандидатом на роль виновника.

Тем не менее, одной из основных целей среды в целом является управление поведением оболочки.В результате это может быть любая переменная в вашей среде... или что-то совершенно другое.

Моя цель в продолжении устранения неполадок состоит в том, чтобы, если кто-то еще придет сюда в поисках решения этой проблемы, он не только знал, как обойти проблему, но и то, что ее вызывает.

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

ПРИМЕЧАНИЕ:

К 'это возможно», я имею в виду манипулирование поведением bash в общем смысле. Я понятия не имею, можно ли изменить, какие символы bash считает «особыми». Тем не менее, я не вижу никаких других приемлемых выводов. Мне пришлось немного потянуться, чтобы прийти к этому. Если у кого-то еще есть какие-либо идеи, я весь слушаю.

partizanos avatar
флаг in
С помощью команды `ls` папки @XX появляются успешно. Проблема заключалась в том, что при нажатии `cd @tab` папки @XX не появляются. Это как если бы @ был специальным символом в bash. (но я не смог найти, где @ без $ впереди (`$@`) имеет особое значение https://www.gnu.org/software/bash/manual/bash.html). Интересный сценарий с NTFS, если у вас есть пример, который произошел, возможно, упомяните его, если кто-то столкнется с той же проблемой (не мой случай, поскольку это среда на основе Ubuntu). Спасибо за помощь :)
Nate T avatar
флаг it
Я слишком долго отвечал. Я начал сразу после своего первого комментария, и к тому времени, когда я закончил, вы уже решили его и ответили. Думаю, так оно и бывает иногда. Главное, что вы нашли решение. Я возьму W на основе этого. Тем не менее, мне все еще интересно, потому что я провел пару тестов ранее, и моя система вообще не рассматривает его как специальный символ за пределами приложений регулярных выражений, таких как `grep`. Меня всегда привлекают подобные вещи.XD ... вы когда-нибудь проверяли свою версию bash? Возможно, поведение было изменено в какой-то момент.
Nate T avatar
флаг it
Кроме того, вы должны протестировать его на другом bash, например /usr/bin/bash. Это также может быть env. переменная, установленная пакетом, установленным в вашей системе. Когда вы запускаете `set`, в верхней части списка есть несколько переменных, некоторые из которых могут по-разному изменять поведение оболочки по умолчанию.
Nate T avatar
флаг it
Собираюсь переместить их (по крайней мере, соответствующие части) в мой ответ, чтобы привести в порядок комментарии.
partizanos avatar
флаг in
Моя версия bash из `bash --version` — 5.0.17(1)-релиз (x86_64-pc-linux-gnu)
partizanos avatar
флаг in
В другой оболочке, например ~/bin:/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/mingw64/bin автозаполнение не требует basckslash. (Другая машина с окнами) В коллаборации с Google поведение также автоматически запускается непосредственно с помощью GNU bash, версия 4.4.20(1)-выпуск (x86_64-pc-linux-gnu)
sudodus avatar
флаг jp
@partizanos, завершение TAB работает с `@name` в bash -- версия 5.0.17 (1)-выпуск (x86_64-pc-linux-gnu) в Ubuntu 20.04 LTS.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.