.bashrc: errore di sintassi vicino al token imprevisto "("

Aug 15 2020

Uso il sottosistema Windows per Linux. All'avvio di Ubuntu, ottengo questo errore:

-bash: /home/divyansh/.bashrc: line 119: syntax error near unexpected token `('
-bash: /home/divyansh/.bashrc: line 119: `export PATH=/mnt/z/usr/local/bin:/mnt/z/usr/local/bin:/home/divyansh/.local/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/mnt/c/Program Files/WindowsApps/CanonicalGroupLimited.UbuntuonWindows_2004.2020.424.0_x64__79rhkp1fndgsc:/mnt/c/Python38/Scripts:/mnt/c/Python38:/mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath:/mnt/c/Windows/System32:/mnt/c/Windows:/mnt/c/Windows/System32/wbem:/mnt/c/Windows/System32/WindowsPowerShell/v1.0:/mnt/c/Windows/System32/OpenSSH:/mnt/c/Program Files/Intel/WiFi/bin:/mnt/c/Program Files/Common Files/Intel/WirelessCommon:/mnt/c/MinGW/bin:/mnt/c/ProgramData/pbox:/mnt/c/Program Files/nodejs:/mnt/c/ProgramData/chocolatey/bin:/mnt/c/Program Files/Git/cmd:/mnt/c/Users/asus/AppData/Local/Microsoft/WindowsApps:/mnt/c/Users/asus/AppData/Local/Programs/Microsoft VS Code/bin:/mnt/c/Program Files/mingw-w64/x86_64-8.1.0-posix-seh-rt_v6-rev0/mingw64/bin:/mnt/c/tools:/mnt/c/Users/asus/AppData/Roaming/npm:/mnt/c/Users/asus/AppData/Local/atom/bin:/snap/bin'

Il token "(" appare solo una volta nella riga

: / mnt / c / Programmi (x86) / File comuni / Oracle / Java / javapath:

. Non capisco perché sia ​​causato questo errore. Cosa posso fare per cancellarlo? Se lo lascio così com'è, come influisce sulle rispettive variabili di percorso?

Risposte

11 ilkkachu Aug 15 2020 at 19:03

Per quanto riguarda la sintassi shell, (è un carattere speciale (come ;, >, &ecc), non può apparire come parte di un valore assegnato senza essere passata o citato. Viene utilizzato ad esempio per avviare le subshell, ma come hai notato, nella maggior parte dei casi causa solo un errore di sintassi. (A differenza, diciamo &, che terminerebbe silenziosamente il comando.)

Tuttavia, le parentesi non sono il tuo unico problema, hai anche degli spazi bianchi nel percorso. Non è un errore di sintassi, ma cambia il significato del comando. export PATH=/mnt/c/Program Files/Somepathmezzi per assegnare /mnt/c/Programa PATH, e di esportare una variabile chiamata Files/Somepath, che provoca anche un errore perché la barra non è valido per un nome variabile.

Dovrai eseguire l'escape di tutte le parentesi e gli spazi, come in Program\ Files\ \(x86\), o semplicemente citare l'intera stringa:

PATH='/mnt/z/usr/local/bin:...:/mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath:...'

o solo parti di esso, anche se potrebbe essere più difficile da leggere:

PATH=/mnt/z/usr/local/bin:...:'/mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath':...

(Nota che non puoi fare entrambe le cose l'una nell'altra, PATH='/mnt/c/Program\ Files\ \(x86\)/...'assegnerebbe una stringa contenente barre rovesciate letterali.)

3 Krackout Aug 15 2020 at 18:42

Aggiungi un carattere di escape \prima di ogni parentesi:

Program Files \(x86\)/