.bashrc: erreur de syntaxe près du jeton inattendu '('

Aug 15 2020

J'utilise le sous-système Windows pour Linux. Au lancement d'Ubuntu, j'obtiens ces erreurs:

-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'

Le jeton '(' n'apparaît qu'une seule fois dans la ligne

: / mnt / c / Program Files (x86) / Common Files / Oracle / Java / javapath:

. Je ne comprends pas pourquoi cette erreur est causée. Que puis-je faire pour effacer cela? Si je le laisse tel quel, comment cela affecte-t-il les variables de chemin respectives?

Réponses

11 ilkkachu Aug 15 2020 at 19:03

En ce qui concerne la syntaxe shell, (est un caractère spécial (comme ;, >, &etc.), il ne peut pas apparaître dans le cadre d'une valeur attribuée sans être échappé ou cité. Il est utilisé par exemple pour démarrer des sous-shell, mais comme vous l'avez remarqué, dans la plupart des cas, cela provoque simplement une erreur de syntaxe. (Contrairement à, disons &, qui mettrait simplement fin silencieusement à la commande.)

Cependant, les parenthèses ne sont pas votre seul problème, vous avez également des espaces dans le chemin. Ce n'est pas une erreur de syntaxe, mais change la signification de la commande. export PATH=/mnt/c/Program Files/Somepathdes moyens d'attribuer /mnt/c/Programà PATH, et d'exporter une variable appelée Files/Somepath, ce qui provoque également une erreur , car la barre oblique n'est pas valide dans un nom de variable.

Vous devrez soit échapper toutes les parenthèses et espaces, comme dans Program\ Files\ \(x86\), soit simplement citer toute la chaîne:

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

ou juste des parties de celui-ci, bien que cela puisse être plus difficile à lire:

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

(Notez que vous ne pouvez pas faire les deux l'un dans l'autre, PATH='/mnt/c/Program\ Files\ \(x86\)/...'attribuerait une chaîne contenant des barres obliques inverses littérales.)

3 Krackout Aug 15 2020 at 18:42

Ajoutez un caractère d'échappement \avant chaque parenthèse:

Program Files \(x86\)/