Puncte:1

eroare de nume de variabilă proastă pe WSL

drapel in

O întrebare similară a fost pusă fără un răspuns satisfăcător. Am instalat Kaldi pe WSL și când rulez un script primesc această eroare, care aparent are legătură cu „Program Files”.

sh: 1: export: Files/WindowsApps/CanonicalGroupLimited.UbuntuonWindows_2004.2021.222.0_x64__79rhkp1fndgsc:/mnt/c/ProgramData/Oracle/Java/javapath:/mnt/c/c/WINDOWS/system3c/WINDOWS/nt c/WINDOWS/System32/Wbem:/mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/:/mnt/c/WINDOWS/System32/OpenSSH/:/mnt/c/Program: nume de variabilă greșit

Unul dintre răspunsuri a fost să faci un link „Program” la „Program Files”. Dar, nu reușește: /mnt/c$ sudo ln -s /mnt/c/Programul „Fișiere de program”. ln: nu s-a putut crea legătura simbolică „Program” Crearea linkului pe partea ferestre reușește, dar nu are niciun efect.

user535733 avatar
drapel cn
Răspunde asta la întrebarea ta? [De ce obțin această eroare când încerc să efectuez acest script bash simplu?](https://askubuntu.com/questions/506415/why-i-obtain-this-error-when-i-try-to-perform- acest-simplu-bash-script)
NotTheDr01ds avatar
drapel vn
@user535733 Aceasta nu pare a fi un duplicat al acelei întrebări *deloc*
muru avatar
drapel us
@NotTheDr01ds ești sigur? În afară de calea reală folosită, această eroare este aproape duplicată acolo.
NotTheDr01ds avatar
drapel vn
@muru M-am gândit serios să-mi schimb profilul pentru a citi „Am folosit Linux de 4 ori mai mult decât muru, dar muru știe de 4 ori mai mult decât mine despre asta”. (adică Muru, tu rock!). Dar sunt destul de sigur că, în acest caz, întrebarea legată este similară doar din greșeală. Acesta a fost cauzat de o utilizare evident proastă a comenzii `export`. S-ar putea să greșesc, dar sunt destul de sigur că aceasta este o problemă de citare a variabilelor care cauzează eșecul „exportului”. Sunt sigur că putem găsi o altă întrebare care ar putea fi un candidat „duplicat” mai bun, dar și aspectele WSL o fac pe aceasta puțin mai „specială”.
NotTheDr01ds avatar
drapel vn
Pare să fie într-adevăr o copie aproape exactă a [acesta] (https://askubuntu.com/q/1215961/1165986), dar nu există nici un răspuns bun pentru acesta. Din moment ce acel OP a abandonat WSL pentru Ubuntu „pur”, nu văd că aceștia acceptă vreodată un răspuns (au spus cam așa într-un comentariu). Din acest motiv, aș propune să închidem întrebarea anterioară în favoarea acesteia (sau să găsim un alt duplicat). Nu este obișnuit, dar am văzut cazuri pe site-urile Stack în care a fost făcut din motive ca acesta.
Greenonline avatar
drapel us
Vă rugăm să [editați] și să furnizați linkul către „întrebarea similară” la care vă referiți în întrebarea dvs
Puncte:1
drapel vn

Am bănuiala că acest lucru este cauzat de ceva din scriptul sau fișierele de pornire (presupunând ~/.bashrc sau ~/.profil) care nu citează corect CALE variabil. Deoarece WSL adaugă calea Windows la calea WSL în mod automat, adaugă câteva elemente de cale cu „Fișiere de program”, ceea ce este corect.

Dar necesită o cotare variabilă adecvată. Verificați scriptul pentru a utiliza $PATH și citați-l (sau adăugați rândurile potențial ofensatoare la întrebarea dvs. dacă aveți nevoie de ajutor cu asta). Dacă nu vedeți nimic suspect în script, verificați și dvs ~/.bashrc și ~/.profil.

Editați/actualizați: Sunt destul de sigur că linia ofensătoare va fi în scriptul care este procesat liniuță (adică SH). Bash se poate descurca bine fără citate suplimentare:

> export PATH=$PATH:newpath
> echo $?
0
> echo $PATH
> # iese PATH corect, chiar și cu spații în calea Windows

Totuși, fugi SH si incearca la fel:

$ export PATH=$PATH:newpath
sh: 1: export: Fișiere/NVIDIA: nume de variabilă greșit
$ export PATH="$PATH":nouă cale
$ echo $?
0
$ echo $PATH
# afișează PATH corect, chiar și cu spații în calea Windows

Există, de asemenea, o soluție „bandaid” pentru a dezactiva caracteristica WSL care adaugă calea Windows la calea WSL/Linux. Puteți face acest lucru creând (sau editând dacă există deja) /etc/wsl.conf și adăugând următoarele rânduri:

[interoperabilitate]
appendWindowsPath=false

Apoi opriți instanța cu wsl --terminate Ubuntu (presupunând numele distribuției implicite) și reporniți WSL.

Nu este o bun soluție permanentă, IMHO, deoarece face mult mai dificilă rularea aplicațiilor Windows (cum ar fi VSCode) atunci când acestea nu sunt în cale.

Mai bine să vă dați seama de problema principală și să o remediați în scripturi.

NotTheDr01ds avatar
drapel vn
@steeldriver Mă gândeam la asta, dar apoi m-am gândit că PATH stricat ar putea apărea în continuare în `~/.bashrc` și apoi, deoarece este exportat, va fi preluat de scriptul în cauză (care rulează probabil sub un `sh` shebang). Acestea fiind spuse, cu cât mă gândesc mai mult la asta, cu atât mai mult cred că problema de citare se află probabil în scenariul în cauză.
NotTheDr01ds avatar
drapel vn
@steeldriver Da, menționez că Windows *adagă* calea Windows în întrebare, dar există și unele *prepending* din anumite motive -- `/mnt/c/Program Files/WindowsApps/CanonicalGroupLimited.UbuntuonWindows_2004.2021.222. 0_x64__79rhkp1fndgsc` este introdus înainte, iar acest lucru este neobișnuit în WSL. Ai dreptate că nu ar trebui să fie WSL care face această parte.
NotTheDr01ds avatar
drapel vn
@steeldriver Văd confuzia - Declarația mea a fost puțin ambiguă. Când am spus „pregătirea căii Windows la aplicația reală Ubuntu UWP”, mă refeream la acea cale a aplicației (nu la „calea Windows”). Editat pentru a încerca să înlăture o parte din ambiguitate.
NotTheDr01ds avatar
drapel vn
@steeldriver Hopa - Mă gândeam că prima cale a fost adăugată înainte, dar acum văd că întreaga eroare face parte din calea *anexată* (inclusiv calea UWP). Îmi voi edita răspunsul pentru a elimina acea parte. Mulțumiri!
drapel hr
Da, devine tokenizat ca `export PATH=everything-up-to-first-whitspace` everything-up-to-next-whitspace`, ceea ce este echivalent cu `export PATH=everything-up-to-first-whitspace` urmat de `export totul-până la următorul-spațiu alb`. O altă soluție este pur și simplu să vă asigurați că `$PATH` este citat pe RHS al misiunii.
NotTheDr01ds avatar
drapel vn
@steeldriver *„O altă soluție este pur și simplu să vă asigurați că $PATH este cotat pe RHS al misiunii.”* Cred că asta este exact soluția. Trebuie doar să găsiți linia ofensă și să o remediați, ceea ce va fi de latitudinea OP.
drapel hr
BTW observația dvs. despre `sh` versus `bash` este exactă - vedeți [Când este necesară citarea dublă?] (https://unix.stackexchange.com/a/68748/65304), în special secțiunea despre RHS a unei sarcini în **Unde puteți omite ghilimele duble** *Rețineți că aveți nevoie de ghilimele duble după `export`, deoarece este o încorporare obișnuită, nu un cuvânt cheie. Acest lucru este valabil doar în unele shell-uri, cum ar fi dash, zsh (în emularea sh), yash sau posh; bash și ksh tratează exportul în mod special.*
Puncte:0
drapel aq

Poate că am întârziat puțin la joc aici, dar postez acest lucru în cazul în care altcineva dă peste acest thread. Aveam aceeași problemă cu o instalare nouă a WSL folosind Ubuntu și a fost rezolvată pur și simplu rulând aceste comenzi (ca root) în WSL:

$ sudo apt update && sudo apt upgrade -y

Tot ce trebuia să fac a fost să repornesc terminalul meu WSL după aceasta și problema a dispărut. Sper că asta ajută pe cineva!

Puncte:-1
drapel in

Am găsit răspunsul în https://arstechnica.com/civis/viewtopic.php?f=16&t=1472885 Trebuie să eliminați căile Windows din $PATH și faceți asta creând /etc/wsl.conf cu următorul text: [interoperabilitate] appendWindowsPath=Fals Apoi închideți fereastra WSL, așteptați 8 secunde și relansați.

NotTheDr01ds avatar
drapel vn
Da, am menționat că fac parte din problema în primul paragraf al răspunsului meu de ieri și am dat opțiunea `wsl.conf` ca o soluție, așa că ar trebui să acceptați acel răspuns. De asemenea, rețineți că eliminarea căii Windows din WSL va reduce funcționalitatea și utilitatea acesteia, așa că este recomandat să corectați eroarea de citare din script.

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.