.bashrc: erro de sintaxe próximo ao token inesperado '('
Eu uso o subsistema do Windows para Linux. Ao iniciar o Ubuntu, recebo estes erros:
-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'
O token '(' aparece apenas uma vez na linha
: / mnt / c / Arquivos de programas (x86) / Arquivos comuns / Oracle / Java / javapath:
. Não entendo por que esse erro é causado. O que posso fazer para limpar isso? Se eu deixar como está, como isso afetará as respectivas variáveis de caminho?
Respostas
No que diz respeito à sintaxe shell, (
é um caractere especial (como ;
, >
, &
etc.), não podem aparecer como parte de um valor atribuído sem ser escapado ou cotados. É usado, por exemplo, para iniciar subshells, mas como você notou, na maioria dos casos, apenas causa um erro de sintaxe. (Ao contrário, digamos &
, do que simplesmente encerraria o comando silenciosamente.)
No entanto, os parênteses não são seu único problema, você também tem espaços em branco no caminho. Isso não é um erro de sintaxe, mas muda o significado do comando. export PATH=/mnt/c/Program Files/Somepath
meios para atribuir /mnt/c/Program
a PATH
, e para exportar uma variável chamada Files/Somepath
, o que também faz com que um erro porque a barra não é válido em um nome de variável.
Você precisará escapar de todos os parênteses e espaços, como em Program\ Files\ \(x86\)
, ou simplesmente citar a string inteira:
PATH='/mnt/z/usr/local/bin:...:/mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath:...'
ou apenas partes dele, embora possa ser mais difícil de ler:
PATH=/mnt/z/usr/local/bin:...:'/mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath':...
(Observe que você não pode fazer os dois dentro do outro, PATH='/mnt/c/Program\ Files\ \(x86\)/...'
atribuiria uma string contendo barras invertidas literais.)
Adicione um caractere de escape \
antes de cada parêntese:
Program Files \(x86\)/