.bashrc: error de sintaxis cerca del token inesperado '('

Aug 15 2020

Utilizo el subsistema de Windows para Linux. Al iniciar Ubuntu, obtengo estos errores:

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

El símbolo '(' aparece solo una vez en la línea

: / mnt / c / Archivos de programa (x86) / Archivos comunes / Oracle / Java / javapath:

. No entiendo por qué se produce este error. ¿Qué puedo hacer para borrar esto? Si lo dejo como está, ¿cómo afecta a las respectivas variables de ruta?

Respuestas

11 ilkkachu Aug 15 2020 at 19:03

Con respecto a la sintaxis del shell, (es un carácter especial (como ;, >, &etc.), no puede aparecer como parte de un valor asignado sin ser escapado o citado. Se usa, por ejemplo, para iniciar subcapas, pero como notó, en la mayoría de los casos solo causa un error de sintaxis. (A diferencia de, digamos &, que terminaría silenciosamente el comando).

Sin embargo, los paréntesis no son su único problema, también tiene espacios en blanco en la ruta. Eso no es un error de sintaxis, pero cambia el significado del comando. export PATH=/mnt/c/Program Files/Somepathmedios para asignar /mnt/c/Programa PATH, y para exportar una variable llamada Files/Somepath, lo que también provoca un error debido a que la barra no es válido en un nombre de variable.

Deberá escapar de todos los paréntesis y espacios, como en Program\ Files\ \(x86\), o simplemente citar la cadena completa:

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

o solo partes de él, aunque eso puede ser más difícil de leer:

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

(Tenga en cuenta que no puede hacer ambas cosas entre sí, PATH='/mnt/c/Program\ Files\ \(x86\)/...'asignaría una cadena que contenga barras invertidas literales).

3 Krackout Aug 15 2020 at 18:42

Agregue un carácter de escape \antes de cada paréntesis:

Program Files \(x86\)/