Puncte:1

Fila Bash nu completează automat folderele cu domeniul nod_module care încep cu @ (la caracter)

drapel in

Am următorul comportament ciudat, următorul folder există @fortawesome

Dar când apăs

tasta de tab cd

nu apare niciunul dintre folderele care încep cu „@”. De ce se întâmplă acest lucru/cum îl pot investiga mai mult?

drapel cn
dovada că utilizați BASH :-) 2 fișiere și 1 director care începe cu @ și autocompletarea bash VA alege directorul când faceți `cd {tab}`. `atinge @1 @2 && mkdir @5 && ls @1 @2 @5` și `cd {tab}` îl face `cd @5/`
Nate T avatar
drapel it
@Rinzwind Confirmat: Tocmai am testat pe 20.04.2 (versiunea bash 5.0.17(1)). Afișează directorul meu de testare `~/@hello`, dar ignoră simbolul @ atunci când decide ordinea de sortare. Al meu era în secțiunea „_H_”.
Nate T avatar
drapel it
@OP ce vrei să spui prin folder cu scop node_module? Ca într-un pachet de noduri?
partizanos avatar
drapel in
Cred că este pentru că @ este un personaj special în bash. Se afișează ecoul @Rinzwind „$SHELL”. /bin/bash
partizanos avatar
drapel in
@NateT Am crezut că problema ar fi fost legată de faptul că era un pachet nod_modules (acestea sunt foldere care încep cu caracterul @ în numele lor prin convenție)
partizanos avatar
drapel in
@Rinzwind în plus, atunci când nu scrieți @ doar fila cd, va apărea când mergeți în folderul @5, dar dacă scrieți `cd @5tab` atunci nu
drapel cn
cel mai important, ai rezolvat-o ;-)
Puncte:1
drapel in

Deoarece @ este un caracter special, adăugarea unei bare oblice inverse la început a rezolvat problema. adică. cd \@tab în timp ce autocompletarea corectă a numelor folderelor.

Nate T avatar
drapel it
Bash-ul meu arată, indiferent. Pe ce versiune esti? `bash --version`. Comanda rapidă nu funcționează. Tipărește intrarea din .bashrc
partizanos avatar
drapel in
Versiunea mea bash de la `bash --version` este 5.0.17(1)-release (x86_64-pc-linux-gnu). La ce scurtătură vrei să spui?
Nate T avatar
drapel it
Cumpărați comandă rapidă, mă refeream doar la utilizarea prescurtației pentru opțiunea --version, cum ar fi `bash - v`. Avem exact aceeași versiune de bash. Trebuie să fie un alt program care să determine shell-ul să-și modifice comportamentul. Întrebarea este ce program și cum anume se modifică. Ați putut verifica valoarea BASHOPTS? Comanda este doar `echo $BASHOPTS`
Nate T avatar
drapel it
Dacă adăugați valoare întrebării dvs., o putem compara cu valoarea mea și poate obținem un indiciu despre ce se întâmplă. Ar trebui să fie o matrice.
partizanos avatar
drapel in
`echo $BASHOPTS` scoate `checkwinsize:cmdhist:complete_fullquote:expand_aliases:extquote:force_fignore:globasciiranges:hostcomplete:interactive_comments:progcomp:promptvars:sourcepath`
Puncte:1
drapel it

Dacă nu ați creat directorul folosind un sistem Linux, există șansa ca bash să se finalizeze și, prin urmare, bash nu îl vede ca fișier.

Un director în Linux este de fapt doar un fișier. care conține metadate, inclusiv locațiile fișierelor care se află „în” el. Acest lucru este mult diferit de modul în care Windows o face.

Dacă modulul (presupunând că este un modul nod) a venit de la npm, există șanse mari să fi fost realizat de un sistem de fișiere NTFS.

Nu sunt sigur cum ar afecta acest lucru modul în care o vede finalizarea bash, dar dacă nu se afișează, acesta este probabil motivul.

Cum pot investiga mai mult.

Pentru a vă asigura că directorul este încă acolo, puteți doar CD inauntru. Oricum, acest lucru vă va oferi mai multe informații. De asemenea, fugi ls -a ~ sau la ~ daca il ai.

De asemenea, ar trebui să creați un folder nou cu aceeași convenție de denumire pentru a vedea dacă are aceeași problemă.

În plus, există un instrument pe care îl puteți obține de la apt numit copac. Este ca ls, dar recursiv. Va scoate întreaga structură de directoare a directorului curent.

Pentru a vedea dacă Linux a „acceptat” corect directorul, puteți verifica permisiunile.

la -a -n

Acordați atenție primului caracter din lista pentru directorul vinovat. Ar trebui să fie un „d”. Dacă este un „-”, atunci nu este deloc un folder. Acum este un fișier în ceea ce privește sistemul de operare, ceea ce înseamnă probabil că orice lucru din interior este șters.

Aceasta va afișa și informațiile despre proprietar și grup. Dacă are toate aceste atribute, atunci cu siguranță ar trebui să apară.

În acest caz, reluați procesele de mai sus și faceți o captură de ecran a rezultatului fiecăruia. Dacă le adaugi la întrebarea ta, garantez că cineva va ști ce se întâmplă.

EDITAȚI | ×:

Deși sunt fericit că ați găsit o soluție la problemă, tot nu mă pot abține să nu mă întreb de ce este cazul pe computerul dvs. și nu al meu. După cum am menționat mai devreme, mi-am testat ușor Ubuntu

(Ubuntu = versiunea 20.04.2 -- bash = versiunea 5.0.17)

prin realizarea unui @Test director și verificarea rezultatelor rulării diferitelor comenzi și aplicații în același director părinte. Am făcut asta înainte să descoperi că poți scăpa de ea. Problema este că toate au funcționat conform așteptărilor pentru mine.

Dacă ți s-a întâmplat și ești pe o versiune destul de actuală de Ubuntu, atunci vor exista fără îndoială alții cu aceeași problemă.

În momentul de față, văd două posibilități principale în ceea ce privește cauza discrepanței. Fie am întâlnit cumva o stare de margine ciudată pe care nimeni altcineva nu a descoperit-o încă (atât de puțin probabil încât mă simt puțin jenat doar când o tast.. XD), fie alt program de pe sistemul tău schimbă comportamentul shell-ului.

După cum am sugerat în comentarii, acest lucru este posibil prin manipularea mediului shell. Există câteva variabile de mediu (în mediul meu 20.04 sunt 11) care încep cu modelul BASH, și indică direct la atributele shell bash. Acestea sunt extrem de ușor de identificat, deoarece toate sunt la începutul listei care este afișată atunci când rulați a stabilit comanda. Dacă treceți prin conductă Mai puțin, ca în:

set | Mai puțin

acestea vor fi primul lucru pe care îl vedeți pe afișajul terminalului. În timp ce majoritatea dintre ele sunt menite doar ca constante pentru a oferi acces la informații din scripturile dvs. etc. și pentru a afișa informațiile conținute (de exemplu, BASH_VERSION), alții pot controla informațiile la care se referă. O astfel de variabilă care iese în evidență pentru mine este BASHOPTS. Dacă comportamentul este, de fapt, rezultatul valorii unei variabile, acesta ar fi un candidat destul de bun pentru vinovat.

Acestea fiind spuse, un scop principal al mediului în ansamblu este de a manipula comportamentul cochiliei.Ca rezultat, ar putea fi orice variabilă din mediul tău... sau ceva complet diferit.

Scopul meu de a continua depanarea este astfel încât, dacă altcineva vine aici în căutarea unei soluții la această problemă, nu numai că va ști cum să ocolească problema, ci și ce o cauzează.

În prezent există foarte puține informații pe web despre această problemă (nu am găsit absolut nimic) și asta în sine spune multe. Acesta nu este niciodată cazul. Niciun răspuns nu este destul de rar, dar nicio întrebare nu este aproape neauzită. De obicei, cineva undeva a avut aceeași problemă și a postat despre ea.

NOTĂ:

De 'acest este posibil', mă refer la manipularea comportamentului lui bash în sens general. Nu am idee dacă este posibil să modific caracterele pe care bash le vede „speciale”. Acestea fiind spuse, nu văd alte concluzii acceptabile. A trebuit să mă întind puțin doar ca să ajung la asta. Dacă altcineva are vreo idee, sunt toată urechile.

partizanos avatar
drapel in
Folosind comanda `ls ` folderele @XX apar cu succes. Problema a fost când apăsați `cd @tab` că folderele @XX nu apar. Este ca și cum @ este un caracter special în bash. (dar nu am putut găsi unde @ fără $ în față (`$@`) are o semnificație specială https://www.gnu.org/software/bash/manual/bash.html ). Scenariu interesant cu NTFS, dacă aveți un exemplu, acest lucru s-a întâmplat, poate menționați-l în cazul în care cineva se confruntă cu aceeași problemă (nu este cazul meu, deoarece este un mediu bazat pe Ubuntu). Multumesc pentru ajutor :)
Nate T avatar
drapel it
Mi-a luat prea mult timp să răspund. Am început imediat după primul meu comentariu și, până am terminat, ați rezolvat deja și ați răspuns. Presupun că așa se întâmplă uneori. Important este că ai găsit o soluție. Voi lua un W pe baza asta. Acestea fiind spuse, sunt încă interesat, pentru că am rulat câteva teste mai devreme, iar sistemul meu nu îl tratează deloc ca un caracter special în afara aplicațiilor regex precum `grep`. Acest tip de chestii mă atrag mereu.XD ... ai verificat vreodată versiunea bash? Poate comportamentul a fost modificat la un moment dat.
Nate T avatar
drapel it
De asemenea, ar trebui să-l testați pe un alt bash, cum ar fi /usr/bin/bash. Poate fi, de asemenea, un env. variabilă stabilită de un pachet instalat pe sistemul dumneavoastră. Când rulați `set`, există câteva elemente disponibile în partea de sus a listei, dintre care unele au capacitatea de a modifica comportamentul implicit al shell-ului în moduri diferite.
Nate T avatar
drapel it
Voi muta aceste (cel puțin părțile relevante) în răspunsul meu, astfel încât să aranjez comentariile.
partizanos avatar
drapel in
Versiunea mea bash de la `bash --version` este 5.0.17(1)-release (x86_64-pc-linux-gnu)
partizanos avatar
drapel in
În alt shell, de exemplu, ~/bin:/mingw64/bin:/usr/local/bin:/usr/bin:/bin:/mingw64/bin completarea automată nu necesită bară bass. (Mașină diferită cu ferestre) În colaborarea cu google, comportamentul se completează și direct cu GNU bash, versiunea 4.4.20(1)-release (x86_64-pc-linux-gnu)
sudodus avatar
drapel jp
@partizanos, completarea TAB funcționează cu `@name` în bash --versiunea este versiunea 5.0.17(1) (x86_64-pc-linux-gnu) în Ubuntu 20.04 LTS.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.