.bashrc: errore di sintassi vicino al token imprevisto "("
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
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/Somepath
mezzi per assegnare /mnt/c/Program
a 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.)
Aggiungi un carattere di escape \
prima di ogni parentesi:
Program Files \(x86\)/