.bashrc: error de sintaxis cerca del token inesperado '('
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
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/Somepath
medios para asignar /mnt/c/Program
a 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).
Agregue un carácter de escape \
antes de cada paréntesis:
Program Files \(x86\)/